Example #1
0
        //==========================================================================
        //  [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);
        }
Example #2
0
        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);
        }