* Filters/FilterPackage.cs, Filters/FilterRPM.cs,
[beagle.git] / Util / FileSystem.cs
blobe2826e603be23a94b8b8cc605c02113ebe2d8152
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;
67 // Special version of this function which handles the root directory.
68 static public string GetDirectoryNameRootOk (string path)
70 // System.IO.Path.GetDirectoryName ("/") returns null.
71 // Handle it specially.
72 if (path == "/")
73 return path;
75 return System.IO.Path.GetDirectoryName (path);