/// <summary> /// Get a RAPIFileTime structure for the specified file /// </summary> /// <param name="FileName">Name of the file to check</param> /// <param name="DesiredTime">A RAPIFileTime</param> /// <returns>The DateTime for the specified value</returns> public DateTime GetDeviceFileTime(string FileName, RAPIFileTime DesiredTime) { CheckConnection(); IntPtr hFile = IntPtr.Zero; long created = 0; long modified = 0; long accessed = 0; hFile = CeCreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); if((int)hFile == INVALID_HANDLE_VALUE) { throw new RAPIException("Could not open remote file"); } if(! Convert.ToBoolean(CeGetFileTime(hFile, ref created, ref modified, ref accessed))) { CeCloseHandle(hFile); throw new RAPIException("Could not get file time"); } CeCloseHandle(hFile); switch(DesiredTime) { case RAPIFileTime.CreateTime: return DateTime.FromFileTime(created); case RAPIFileTime.LastAccessTime: return DateTime.FromFileTime(accessed); case RAPIFileTime.LastModifiedTime: return DateTime.FromFileTime(modified); default: throw new RAPIException("Invalid DesiredTime parameter"); } }
/// <summary> /// Modified a FileTime for the specified file /// </summary> /// <param name="FileName">File to modify</param> /// <param name="DesiredTime">Time to modify</param> /// <param name="NewTime">New time to set</param> public void SetDeviceFileTime(string FileName, RAPIFileTime DesiredTime, DateTime NewTime) { CheckConnection(); IntPtr hFile = IntPtr.Zero; hFile = CeCreateFile(FileName, GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); if((int)hFile == INVALID_HANDLE_VALUE) { throw new RAPIException("Could not open remote file"); } SYSTEMTIME st = new SYSTEMTIME(NewTime); long ft = (long)st; long empty = 0; switch(DesiredTime) { case RAPIFileTime.CreateTime: if(! Convert.ToBoolean(CeSetFileTime(hFile, ref ft, ref empty, ref empty))) { CeCloseHandle(hFile); throw new RAPIException("Could not get file time"); } break; case RAPIFileTime.LastAccessTime: if(! Convert.ToBoolean(CeSetFileTime(hFile, ref empty, ref ft, ref empty))) { CeCloseHandle(hFile); throw new RAPIException("Could not get file time"); } break; case RAPIFileTime.LastModifiedTime: if(! Convert.ToBoolean(CeSetFileTime(hFile, ref empty, ref empty, ref ft))) { CeCloseHandle(hFile); throw new RAPIException("Could not get file time"); } break; default: throw new RAPIException("Invalid DesiredTime parameter"); } CeCloseHandle(hFile); }
/// <summary> /// Modified a FileTime for the specified file /// </summary> /// <param name="FileName">File to modify</param> /// <param name="DesiredTime">Time to modify</param> /// <param name="NewTime">New time to set</param> public bool SetDeviceFileTime(string FileName, RAPIFileTime DesiredTime, DateTime NewTime) { CheckConnection(); IntPtr hFile = IntPtr.Zero; hFile = CeCreateFile(FileName, GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); if((int)hFile == INVALID_HANDLE_VALUE) { return false; } SYSTEMTIME st = new SYSTEMTIME(NewTime); long ft = (long)st; long empty = 0; switch(DesiredTime) { case RAPIFileTime.CreateTime: if(! Convert.ToBoolean(CeSetFileTime(hFile, ref ft, ref empty, ref empty))) { CeCloseHandle(hFile); return false; } break; case RAPIFileTime.LastAccessTime: if(! Convert.ToBoolean(CeSetFileTime(hFile, ref empty, ref ft, ref empty))) { CeCloseHandle(hFile); return false; } break; case RAPIFileTime.LastModifiedTime: if(! Convert.ToBoolean(CeSetFileTime(hFile, ref empty, ref empty, ref ft))) { CeCloseHandle(hFile); return false; } break; default: return false; } CeCloseHandle(hFile); return true; }