public int SetFileTime( String filename, DateTime ctime, DateTime atime, DateTime mtime, DokanFileInfo info) { Debug("SetFileTime {0}", filename); try { Debug(" filetime {0} {1} {2}", ctime.ToString(), atime.ToString(), mtime.ToString()); string path = GetPath(filename); ChannelSftp channel = GetChannel(); SftpATTRS attr = channel.stat(path); TimeSpan at = (atime - new DateTime(1970, 1, 1, 0, 0, 0)); TimeSpan mt = (mtime - new DateTime(1970, 1, 1, 0, 0, 0)); int uat = (int)at.TotalSeconds; int umt = (int)mt.TotalSeconds; if (mtime == DateTime.MinValue) { umt = attr.getMTime(); } if (atime == DateTime.MinValue) { uat = attr.getATime(); } attr.setACMODTIME(uat, umt); channel.setStat(path, attr); return(0); } catch (SftpException) { return(-1); } catch (Exception e) { connectionError_ = true; Debug(e.ToString()); Reconnect(); return(-1); } }
public NtStatus GetFileInformation( string filename, out FileInformation fileinfo, DokanFileInfo info) { fileinfo = new FileInformation(); try { string path = GetPath(filename); fileinfo.FileName = path; SftpATTRS attr = GetChannel().stat(path); fileinfo.Attributes = attr.isDir() ? FileAttributes.Directory : FileAttributes.Normal; if (DokanSSHFS.UseOffline) { fileinfo.Attributes |= FileAttributes.Offline; } DateTime org = new DateTime(1970, 1, 1, 0, 0, 0, 0); fileinfo.CreationTime = org.AddSeconds(attr.getMTime()); fileinfo.LastAccessTime = org.AddSeconds(attr.getATime()); fileinfo.LastWriteTime = org.AddSeconds(attr.getMTime()); fileinfo.Length = attr.getSize(); return(NtStatus.Success); } catch (SftpException) { return(NtStatus.Error); } catch (Exception e) { connectionError_ = true; Debug(e.ToString()); Reconnect(); return(NtStatus.Error); } }