Exemplo n.º 1
0
        /// <summary>
        /// 获取一个文件
        /// </summary>
        /// <param name="vdir">虚拟路径</param>
        /// <param name="modify">需要修改的权限</param>
        /// <returns>文件信息,如不存在则为null</returns>
        public FileInfo GetFile(string vdir, bool modify = false)
        {
            string pre  = VPath.NormalizeFilename(vdir);
            VFile  file = Get(pre) as VFile;

            if (file == null)
            {
                return(null);
            }
            if (modify && !file.Permission.GroupCanWrite)
            {
                return(null);
            }
            return(file.RealFile);
        }
Exemplo n.º 2
0
        /*  perm权限设置
         *  perm="a" / "c" / "d" / "e" / "f" / "l" / "m" / "p" / "r" / "w"
         *  a:文件,APPE追加许可
         *  c:文件夹,STOR STOU APPE存储许可(不能已存在)
         *  d:全部,RMD DELE删除许可
         *  e:文件夹,CWD PWD CDUP目录切换许可
         *  f:全部,RNFR重命名许可
         *  l:文件夹,LIST NLST MLSD列目录许可
         *  m:文件夹,MKD建目录许可
         *  p:文件夹,DELE文件夹内容删除许可
         *  r:文件,RTER取得许可
         *  w:文件,STOR存储许可
         */

        /// <summary>
        /// 取得格式化的文件列表
        /// <para>MLSD in RFC 3659</para>
        /// </summary>
        /// <param name="vPath"></param>
        /// <returns></returns>
        public List <string> MachineListFiles(string vPath = null)
        {
            VDirectory dir;

            if (string.IsNullOrEmpty(vPath))
            {
                dir = _currentDirectory;
                SetPermission(dir, true);
            }
            else
            {
                dir = Get(VPath.NormalizeFilename(vPath), true) as VDirectory ?? _currentDirectory;
            }

            dir.Refresh();  //FIXED:目录及时更新

            List <string> fileList = new List <string>();

            DateTime now = DateTime.Now;

            foreach (var f in dir.SubFiles)
            {
                if (!f.Permission.CanRead)
                {
                    continue;
                }
                //参考格式
                //type=dir;modify=20141218151753;perm=el; 新建文件夹
                DateTime      editDate;
                StringBuilder sb = new StringBuilder();

                if (f.IsDirectory)
                {
                    VDirectory vf = (VDirectory)f;
                    editDate = vf.RealDirectory.LastWriteTime.ToUniversalTime();

                    sb.Append("Type=dir;");                                                       //type类型
                    sb.Append("modify=").Append(editDate.ToString("yyyyMMddHHmmss")).Append(';'); //modify修改时间
                    //sb.Append("size=").Append("0");   //文件夹没有size
                    //-RFC 3659- -7.5.5- Its value is always an unordered sequence of alphabetic characters. 意味着权限字母不用排序
                    sb.Append("perm=el");   //perm权限,具体见上
                    if (vf.Permission.CanWrite)
                    {
                        sb.Append("cm");
                    }
                    if (vf.Permission.GroupCanWrite)
                    {
                        sb.Append("dfp");
                    }
                    sb.Append("; ");
                    sb.Append(f.Name);
                }
                else
                {
                    VFile vf = (VFile)f;
                    editDate = vf.RealFile.LastWriteTime.ToUniversalTime();

                    //参考格式
                    //type=file;modify=20140628041312;size=761344; Server.exe

                    sb.Append("type=file;");                                                      //type类型
                    sb.Append("modify=").Append(editDate.ToString("yyyyMMddHHmmss")).Append(';'); //modify修改时间
                    sb.Append("size=").Append(vf.RealFile.Length).Append(';');                    //size大小
                    //-RFC 3659- -7.5.5- Its value is always an unordered sequence of alphabetic characters. 意味着权限字母不用排序
                    sb.Append("perm=r");                                                          //perm权限,具体见上
                    if (vf.Permission.CanWrite)
                    {
                        //sb.Append("cm");
                    }
                    if (vf.Permission.GroupCanWrite)
                    {
                        sb.Append("adfw");
                    }
                    sb.Append("; ");
                    sb.Append(f.Name);
                }
                fileList.Add(sb.ToString());
            }
            return(fileList);
        }
Exemplo n.º 3
0
        private List <string> GenerateList(IEnumerable <IFile> list)
        {
            List <string> fileList = new List <string>();

            DateTime now = DateTime.Now;

            foreach (var f in list)
            {
                if (!f.Permission.CanRead)
                {
                    continue;
                }
                //参考格式
                //drwxrwxrwx   1 user     group           0 Nov 27 00:13 上传

                StringBuilder sb = new StringBuilder();
                DateTime      editDate;
                if (f.IsDirectory)
                {
                    VDirectory vf = (VDirectory)f;
                    editDate = vf.RealDirectory.LastWriteTime;

                    sb.Append('d').Append(f.Permission.ToString());                                 //文件权限10位
                    sb.Append("   1 ");                                                             //1空格  子文件个数2位 1空格
                    sb.Append(string.Format("{0,-8}", _config.Owner.PadRight(8))).Append(' ');      //文件所有者8位 1空格
                    sb.Append(string.Format("{0,-8}", _config.OwnerGroup.PadRight(8))).Append(' '); //文件所有者8位 1空格
                    //sb.Append(_config.Owner.Substring(0, 8).PadRight(8)).Append(' ');       //文件所有者8位 1空格
                    //sb.Append(_config.OwnerGroup.Substring(0, 8).PadRight(8)).Append(' ');  //文件所有组8位 1空格
                    sb.Append("       0 ");                                   //文件大小>=8位,文件夹通常为0或4096  1空格

                    sb.Append(editDate < now.Subtract(TimeSpan.FromDays(180)) //文件修改日期5位,1空格,时间5位,1空格
                        ? editDate.ToString("MMM dd  yyyy", CultureInfo.InvariantCulture)
                        : editDate.ToString("MMM dd HH:mm", CultureInfo.InvariantCulture))
                    .Append(' ');
                    sb.Append(f.Name);
                }
                else
                {
                    VFile vf = (VFile)f;
                    editDate = vf.RealFile.LastWriteTime;

                    //string.Format("{0,-50}", theObj);//格式化成50个字符,原字符左对齐,不足则补空格
                    //string.Format("{0,50}", theObj);//格式化成50个字符,原字符右对齐,不足则补空格
                    sb.Append('-').Append(f.Permission.ToString());                                 //文件权限10位
                    sb.Append("   1 ");                                                             //1空格  子文件个数2位 1空格
                    sb.Append(string.Format("{0,-8}", _config.Owner.PadRight(8))).Append(' ');      //文件所有者8位 1空格
                    sb.Append(string.Format("{0,-8}", _config.OwnerGroup.PadRight(8))).Append(' '); //文件所有者8位 1空格
                    //sb.Append(_config.OwnerGroup.Substring(0, 8).PadRight(8)).Append(' ');  //文件所有组8位 1空格
                    string length = vf.RealFile.Length.ToString(CultureInfo.InvariantCulture);
                    if (length.Length < 8)
                    {
                        length = length.PadLeft(8);
                    }
                    sb.Append(length).Append(' ');                            //文件大小>=8位  1空格
                    sb.Append(editDate < now.Subtract(TimeSpan.FromDays(180)) //文件修改日期5位,1空格,时间5位,1空格
                        ? editDate.ToString("MMM dd  yyyy", CultureInfo.InvariantCulture)
                        : editDate.ToString("MMM dd HH:mm", CultureInfo.InvariantCulture))
                    .Append(' ');
                    sb.Append(f.Name);
                }
                fileList.Add(sb.ToString());
            }
            return(fileList);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 取得格式化的文件信息
        /// <para>MLST in RFC 3659</para>
        /// </summary>
        /// <param name="vPath"></param>
        /// <returns></returns>
        public string MachineFileInfo(string vPath = null)
        {
            IFile         f;
            bool          isDir = false;
            StringBuilder sb    = new StringBuilder();
            DateTime      editDate;

            if (string.IsNullOrEmpty(vPath))
            {
                f     = _currentDirectory;
                isDir = true;
            }
            else
            {
                if (ExistsFile(vPath))
                {
                    f     = Get(vPath) as VFile;
                    isDir = false;
                }
                else if (ExistsDirectory(vPath))
                {
                    f     = Get(vPath, true) as VDirectory;
                    isDir = true;
                }
                else
                {
                    return("");
                }
            }
            if (f == null)
            {
                return("");
            }
            if (isDir)
            {
                var vf = (VDirectory)f;
                editDate = vf.RealDirectory.LastWriteTime.ToUniversalTime();                  //FIXED:需要使用UTC时间

                sb.Append("type=dir;");                                                       //type类型
                sb.Append("modify=").Append(editDate.ToString("yyyyMMddHHmmss")).Append(';'); //modify修改时间
                sb.Append("perm=el");                                                         //perm权限
                if (vf.Permission.CanWrite)
                {
                    sb.Append("cm");
                }
                if (vf.Permission.GroupCanWrite)
                {
                    sb.Append("dfp");
                }
                sb.Append("; ");
                if (vf == _rootDirectory)
                {
                    sb.Append("/");
                }
                else
                {
                    sb.Append(f.Name);
                }
            }
            else
            {
                VFile vf = (VFile)f;
                editDate = vf.RealFile.LastWriteTime.ToUniversalTime(); //FIXED:需要使用UTC时间

                //参考格式
                //type=file;modify=20140628041312;size=761344; Server.exe
                sb.Append("type=file;");                                                      //type类型
                sb.Append("modify=").Append(editDate.ToString("yyyyMMddHHmmss")).Append(';'); //modify修改时间
                sb.Append("size=").Append(vf.RealFile.Length).Append(';');                    //size大小
                sb.Append("perm=r");                                                          //perm权限
                if (vf.Permission.CanWrite)
                {
                    //sb.Append("cm");
                }
                if (vf.Permission.GroupCanWrite)
                {
                    sb.Append("adfw");
                }
                sb.Append("; ");
                sb.Append(f.Name);
            }
            return(sb.ToString());
        }