//========================================================================== // [sftp.finfo] FileInfo 取得・管理 //------------------------------------------------------------------------ // [sftp.finfo.download] FileInfo 取得 FileInfo CreateFileInfo(string rpath, jsch::SftpATTRS attrs, System.DateTime infotime) { SftpFileInfo info = new SftpFileInfo(infotime, this, rpath); info.JschAttribute = attrs; info.FileType = SftpFileType.NormalFile; if (attrs.isDir()) { info.Attributes |= System.IO.FileAttributes.Directory; info.FileType = SftpFileType.Directory; } else if (attrs.isLink()) { switch (account.SymlinkTreatment) { case mwg.Sshfs.SftpSymlink.Dereference: info.FileType = SftpFileType.LinkAsDereferenced; info.Attributes |= System.IO.FileAttributes.ReparsePoint; break; case mwg.Sshfs.SftpSymlink.NormalFile: case mwg.Sshfs.SftpSymlink.Shortcut: info.FileType = SftpFileType.LinkAsCygwinSymlink; info.Attributes |= System.IO.FileAttributes.ReadOnly; info.Attributes |= System.IO.FileAttributes.System; break; } } if (this.IsReadOnly && !info.IsDirectory) { info.Attributes |= System.IO.FileAttributes.ReadOnly; } if (account.Offline) { info.Attributes |= System.IO.FileAttributes.Offline; } if (info.InternalName.Length > 0 && info.InternalName[0] == '.') { info.Attributes |= System.IO.FileAttributes.Hidden; } info.Permission = attrs.getPermissions(); info.LastWriteTime = Unix.UnixTime.UnixTimeToDateTime(attrs.getMTime()); info.LastAccessTime = Unix.UnixTime.UnixTimeToDateTime(attrs.getATime()); info.CreationTime = info.LastWriteTime; info.Length = attrs.getSize(); return(info); }
FileInfo Reparse(System.DateTime referenceTime, FileInfo info_, int hop) { if (0 == (info_.Attributes & System.IO.FileAttributes.ReparsePoint)) { return(info_); } SftpFileInfo info = (SftpFileInfo)info_; if (account.SymlinkTreatment == mwg.Sshfs.SftpSymlink.Dereference) { string rpath = info.InternalPath; if (rpath.Length > 0 && rpath[rpath.Length - 1] == '/') { rpath = rpath.Substring(0, rpath.Length - 1); } string rpath2 = Readlink(info); //session.Message.Write(1,"$ readlink {0}",rpath); //string rpath2=session.Sftp.readlink(rpath); if (rpath2.Length == 0) { goto normal; } rpath2 = Unix.UnixPath.Combine(Unix.UnixPath.GetDirectoryPath(rpath), rpath2); SftpFileInfo info2 = (SftpFileInfo)this.GetFile(referenceTime, rpath2); if (info2 == null) { goto normal; } Reparse(referenceTime, info2, hop - 1); info.Attributes = info2.Attributes; info.Permission = info2.Permission; info.Length = info2.Length; info.LastWriteTime = info2.LastWriteTime; info.LastAccessTime = info2.LastAccessTime; info.CreationTime = info2.CreationTime; info.JschAttribute = info2.JschAttribute; return(info); normal: info.Attributes &= ~System.IO.FileAttributes.ReparsePoint; return(info); } // ResolveLink(referenceTime,info,10); return(info); }