//------------------------------------------------------------------------------ // // System.IO.FileSystemInfo.cs // // Copyright (C) 2001 Moonlight Enterprises, All Rights Reserved // // Author: Jim Richardson, develop@wtfo-guru.com // Created: Monday, August 13, 2001 // //------------------------------------------------------------------------------ using System; namespace System.IO { /// /// /// public abstract class FileSystemInfo : MarshalByRefObject { // protected stat status; private bool inited; protected string FullPath; protected string OriginalPath; protected FileSystemInfo () { /* status.st_dev = 0; status.st_mode = 0; status.st_nlink = 0; status.st_uid = 0; status.st_gid = 0; status.st_size = 0; status.st_atime = 0; status.st_mtime = 0; status.st_ctime = 0; */ FullPath = OriginalPath = String.Empty; } [MonoTODO] public FileAttributes Attributes { get { return getAttributes (); } set { //TODO: Implement } } [MonoTODO] public DateTime CreationTime { get { if (!inited) { update (); } // TODO: fix next line as far as my research has taken me so far, Unix/Linux don't // have a creation time and according to my man the ctime if the last time // one of the chmod flags was changed return c2csharpTime (10);//status.st_ctime); } set { //TODO: Implement } } public abstract bool Exists {get;} public abstract string Name {get;} public abstract void Delete (); /// /// Get the extension of this item /// public string Extension { get { return Path.GetExtension (getPathName ()); } } public string FullName { get { return getPathName (); } } [MonoTODO] public DateTime LastAccessTime { get { if (!inited) { update (); } return c2csharpTime (1);//status.st_atime); } set { // TODO: Implement } } [MonoTODO] public DateTime LastWriteTime { // TODO: Implement get { if (!inited) { update (); } return c2csharpTime (1);//status.st_mtime); } set { // TODO: Implement } } public override int GetHashCode () { return getPathName ().GetHashCode (); } [MonoTODO] public override bool Equals (object obj) { // TODO: Implement return false; } [MonoTODO] new public static bool Equals (object obj1, object obj2) { // TODO: Implement return false; } public void Refresh () { update (); } unsafe private void update () { /* stat fs; int nRetCode = Wrapper.stat (getPathName (), &fs); status = fs; switch (nRetCode) { case 0: break; case Wrapper.ENOENT: case Wrapper.ENOTDIR: throw new ArgumentException ("File not found"); //break; generates warning CS0162 unreachable code default: throw new IOException (); //break; generates warning CS0162 unreachable code } */ inited = true; } [MonoTODO] private DateTime c2csharpTime (double seconds) { // TODO: determine if UTC time which the // calculation below is in is correct DateTime dt = new DateTime (1970, 1, 1, 0, 0, 0); dt.AddSeconds (seconds); return dt; } protected string getPathName () { if (FullPath == String.Empty) FullPath = Path.GetFullPath (OriginalPath); return FullPath; } [MonoTODO] protected FileAttributes getAttributes () { if (!inited) { update (); } // TODO: lots more attribute work needed FileAttributes attrib = 0; /* if (((status.st_mode & Wrapper.S_IFMT) & Wrapper.S_IFDIR) != 0) { attrib |= FileAttributes.Directory; } else { attrib |= FileAttributes.Normal; } */ return attrib; } } }