123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Threading;
- namespace SharpCifs.Util.Sharpen
- {
- public class FilePath
- {
- private string _path;
- private static long _tempCounter;
- public FilePath()
- {
- }
- public FilePath(string path)
- : this((string)null, path)
- {
- }
- public FilePath(FilePath other, string child)
- : this((string)other, child)
- {
- }
- public FilePath(string other, string child)
- {
- if (other == null)
- {
- _path = child;
- }
- else
- {
- while (!string.IsNullOrEmpty(child)
- && (child[0] == Path.DirectorySeparatorChar
- || child[0] == Path.AltDirectorySeparatorChar))
- child = child.Substring(1);
- if (!string.IsNullOrEmpty(other)
- && other[other.Length - 1] == Path.VolumeSeparatorChar)
- other += Path.DirectorySeparatorChar;
- _path = Path.Combine(other, child);
- }
- }
- public static implicit operator FilePath(string name)
- {
- return new FilePath(name);
- }
- public static implicit operator string(FilePath filePath)
- {
- return filePath == null ? null : filePath._path;
- }
- public override bool Equals(object obj)
- {
- FilePath other = obj as FilePath;
- if (other == null)
- return false;
- return GetCanonicalPath() == other.GetCanonicalPath();
- }
- public override int GetHashCode()
- {
- return _path.GetHashCode();
- }
- public bool CreateNewFile()
- {
- try
- {
- //Stream.`Close` method deleted
- //File.Open (_path, FileMode.CreateNew).Close ();
- File.Open(_path, FileMode.CreateNew).Dispose();
- return true;
- }
- catch
- {
- return false;
- }
- }
- public static FilePath CreateTempFile()
- {
- return new FilePath(Path.GetTempFileName());
- }
- public static FilePath CreateTempFile(string prefix, string suffix)
- {
- return CreateTempFile(prefix, suffix, null);
- }
- public static FilePath CreateTempFile(string prefix, string suffix, FilePath directory)
- {
- string file;
- if (prefix == null)
- {
- throw new ArgumentNullException("prefix");
- }
- if (prefix.Length < 3)
- {
- throw new ArgumentException("prefix must have at least 3 characters");
- }
- string str = (directory == null) ? Path.GetTempPath() : directory.GetPath();
- do
- {
- file = Path.Combine(str, prefix + Interlocked.Increment(ref _tempCounter) + suffix);
- } while (File.Exists(file));
- new FileOutputStream(file).Close();
- return new FilePath(file);
- }
- public void DeleteOnExit()
- {
- }
- public FilePath GetAbsoluteFile()
- {
- return new FilePath(Path.GetFullPath(_path));
- }
- public string GetAbsolutePath()
- {
- return Path.GetFullPath(_path);
- }
- public FilePath GetCanonicalFile()
- {
- return new FilePath(GetCanonicalPath());
- }
- public string GetCanonicalPath()
- {
- return Path.GetFullPath(_path);
- }
- public string GetName()
- {
- return Path.GetFileName(_path);
- }
- public FilePath GetParentFile()
- {
- return new FilePath(Path.GetDirectoryName(_path));
- }
- public string GetPath()
- {
- return _path;
- }
- public bool IsAbsolute()
- {
- return Path.IsPathRooted(_path);
- }
- public bool IsDirectory()
- {
- return false; // FileHelper.Instance.IsDirectory(this);
- }
- public bool IsFile()
- {
- return false; //FileHelper.Instance.IsFile (this);
- }
- public long LastModified()
- {
- return 0; // FileHelper.Instance.LastModified(this);
- }
- public long Length()
- {
- return 0; // FileHelper.Instance.Length(this);
- }
- public string[] List()
- {
- return List(null);
- }
- public string[] List(IFilenameFilter filter)
- {
- try
- {
- if (IsFile())
- return null;
- List<string> list = new List<string>();
- foreach (string filePth in Directory.GetFileSystemEntries(_path))
- {
- string fileName = Path.GetFileName(filePth);
- if ((filter == null) || filter.Accept(this, fileName))
- {
- list.Add(fileName);
- }
- }
- return list.ToArray();
- }
- catch
- {
- return null;
- }
- }
- public FilePath[] ListFiles()
- {
- try
- {
- if (IsFile())
- return null;
- List<FilePath> list = new List<FilePath>();
- foreach (string filePath in Directory.GetFileSystemEntries(_path))
- {
- list.Add(new FilePath(filePath));
- }
- return list.ToArray();
- }
- catch
- {
- return null;
- }
- }
- static void MakeDirWritable(string dir)
- {
- //FileHelper.Instance.MakeDirWritable (dir);
- }
- static void MakeFileWritable(string file)
- {
- //FileHelper.Instance.MakeFileWritable (file);
- }
- public bool Mkdir()
- {
- try
- {
- if (Directory.Exists(_path))
- return false;
- Directory.CreateDirectory(_path);
- return true;
- }
- catch (Exception)
- {
- return false;
- }
- }
- public bool Mkdirs()
- {
- try
- {
- if (Directory.Exists(_path))
- return false;
- Directory.CreateDirectory(_path);
- return true;
- }
- catch
- {
- return false;
- }
- }
- public bool RenameTo(FilePath file)
- {
- return RenameTo(file._path);
- }
- public bool RenameTo(string name)
- {
- return false; // FileHelper.Instance.RenameTo(this, name);
- }
- public bool SetLastModified(long milis)
- {
- return false; // FileHelper.Instance.SetLastModified(this, milis);
- }
- public bool SetReadOnly()
- {
- return false; // FileHelper.Instance.SetReadOnly(this);
- }
- public Uri ToUri()
- {
- return new Uri(_path);
- }
- // Don't change the case of this method, since ngit does reflection on it
- public bool CanExecute()
- {
- return false; // FileHelper.Instance.CanExecute(this);
- }
- // Don't change the case of this method, since ngit does reflection on it
- public bool SetExecutable(bool exec)
- {
- return false; // FileHelper.Instance.SetExecutable(this, exec);
- }
- public string GetParent()
- {
- string p = Path.GetDirectoryName(_path);
- if (string.IsNullOrEmpty(p) || p == _path)
- return null;
- return p;
- }
- public override string ToString()
- {
- return _path;
- }
- static internal string PathSeparator
- {
- get { return Path.PathSeparator.ToString(); }
- }
- static internal char PathSeparatorChar
- {
- get { return Path.PathSeparator; }
- }
- static internal char SeparatorChar
- {
- get { return Path.DirectorySeparatorChar; }
- }
- static internal string Separator
- {
- get { return Path.DirectorySeparatorChar.ToString(); }
- }
- }
- }
|