Dont reindex already indexed files. Yet another bug uncovered by the DateTime fixes.
[beagle.git] / Util / FileSystem.cs
blob9e0bd179d2f93bb87945b4e9e5ec20b8fcb75eea
1 //
2 // FileSystem.cs
3 //
4 // Copyright (C) 2004 Novell, Inc.
5 //
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a
9 // copy of this software and associated documentation files (the "Software"),
10 // to deal in the Software without restriction, including without limitation
11 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 // and/or sell copies of the Software, and to permit persons to whom the
13 // Software is furnished to do so, subject to the following conditions:
15 // The above copyright notice and this permission notice shall be included in
16 // all copies or substantial portions of the Software.
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 // DEALINGS IN THE SOFTWARE.
27 using System;
28 using System.IO;
30 namespace Beagle.Util {
32 public class FileSystem {
34 static public bool Exists (string path)
36 return File.Exists (path) || Directory.Exists (path);
39 static public DateTime GetLastWriteTimeUtc (string path)
41 if (path == null)
42 throw new ArgumentNullException ("path");
44 if (File.Exists (path))
45 return File.GetLastWriteTimeUtc (path);
46 else if (Directory.Exists (path))
47 return Directory.GetLastWriteTimeUtc (path);
48 else
49 throw new FileNotFoundException (path);
52 static public FileSystemInfo New (string path)
54 if (Directory.Exists (path))
55 return new DirectoryInfo (path);
56 return new FileInfo (path);
59 // I guess this is as good a place for this as any.
60 static public bool IsSymLink (string path)
62 Mono.Unix.Native.Stat stat;
63 Mono.Unix.Native.Syscall.lstat (path, out stat);
64 return (stat.st_mode & Mono.Unix.Native.FilePermissions.S_IFLNK) == Mono.Unix.Native.FilePermissions.S_IFLNK;
68 static public bool IsSpecialFile (string path)
70 Mono.Unix.Native.Stat stat;
71 Mono.Unix.Native.Syscall.lstat (path, out stat);
73 Mono.Unix.Native.FilePermissions type = (stat.st_mode & Mono.Unix.Native.FilePermissions.S_IFMT);
75 if (type == Mono.Unix.Native.FilePermissions.S_IFLNK
76 || type == Mono.Unix.Native.FilePermissions.S_IFCHR
77 || type == Mono.Unix.Native.FilePermissions.S_IFBLK
78 || type == Mono.Unix.Native.FilePermissions.S_IFIFO
79 || type == Mono.Unix.Native.FilePermissions.S_IFSOCK)
80 return true;
82 return false;
85 public static bool IsWritable (string path)
87 Mono.Unix.Native.Stat stat;
88 Mono.Unix.Native.Syscall.lstat (path, out stat);
90 Mono.Unix.Native.FilePermissions type = (stat.st_mode & Mono.Unix.Native.FilePermissions.S_IFMT);
92 if (type == Mono.Unix.Native.FilePermissions.S_IWUSR
93 || type == Mono.Unix.Native.FilePermissions.S_IWGRP
94 || type == Mono.Unix.Native.FilePermissions.S_IWOTH)
95 return true;
97 return false;
100 // Special version of this function which handles the root directory.
101 static public string GetDirectoryNameRootOk (string path)
103 // System.IO.Path.GetDirectoryName ("/") returns null.
104 // Handle it specially.
105 if (path == "/")
106 return path;
108 return System.IO.Path.GetDirectoryName (path);