| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 | 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 ()		{			string p = Path.GetFullPath (_path);			p.TrimEnd (Path.DirectorySeparatorChar);			return p;		}		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 (); }		}	}}
 |