Exemplo n.º 1
0
        //通过起始位置找到内部文件;
        public static IFile GetInnerFileByPosition(this IIterableFile iterable, long pos)
        {
            if (iterable == null || iterable.Children == null)
            {
                return(null);
            }

            foreach (var item in iterable.Children)
            {
                if (item is RegularFile)
                {
                    if ((item as RegularFile).StartLBA == pos)
                    {
                        return(item);
                    }
                }
                else if (item is IIterableFile)
                {
                    var itera = (item as IIterableFile);
                    if (!(itera.IsBackFile() || itera.IsBackUpFile()))
                    {
                        IFile innerFile = null;
                        if ((innerFile = GetInnerFileByPosition(itera, pos)) != null)
                        {
                            return(innerFile);
                        }
                    }
                }
            }
            return(null);
        }
Exemplo n.º 2
0
 //得到内部文件的总大小;
 public static long GetTotalSize(this IIterableFile file)
 {
     if (file.Children != null)
     {
         long sum = 0;
         TraverseAddNum(file, ref sum);
         return(sum);
     }
     return(0);
 }
Exemplo n.º 3
0
        /// <summary>
        /// 判定是否为上级文件(..);
        /// </summary>
        /// <param name="dir"></param>
        /// <returns></returns>
        public static bool IsBackFile(this IIterableFile dir)
        {
            if (dir == null)
            {
                return(false);
            }

            return(dir.Name == "..");
            //return dir.Children != null &&
            //    dir.Children.Count != 0 &&
            //    dir.Children.Contains(dir.Parent);
        }
Exemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="itrFile"></param>
        /// <returns></returns>
        public static int IndexOf(this IIterableFile itrFile, IFile file)
        {
            if (itrFile == null && itrFile.Children == null)
            {
                return(-1);
            }
            var idx = 0;

            foreach (var item in itrFile.Children)
            {
                if (item == file)
                {
                    return(idx);
                }
                idx++;
            }
            return(-1);
        }
Exemplo n.º 5
0
 private static void TraverseAddNum(IIterableFile file, ref long sum)
 {
     foreach (var p in file.Children)
     {
         if (p.Type == FileType.Directory)
         {
             var direc = p as Abstracts.Directory;
             if (direc?.Deleted == false)
             {
                 if (direc.Name != ".." && direc.Name != ".")
                 {
                     TraverseAddNum(direc, ref sum);
                 }
             }
         }
         else if (p.Type == FileType.RegularFile)
         {
             sum += p.Size;
         }
     }
 }
Exemplo n.º 6
0
        /// <summary>
        /// 通过Url参数获得子文件;
        /// </summary>
        /// <param name="part"></param>
        /// <param name="urlArgs"></param>
        /// <returns></returns>
        public static IFile GetFileByUrl(this Partition part, string[] urlArgs)
        {
            if (urlArgs == null)
            {
                return(null);
            }
            if (urlArgs.Length == 1 && string.IsNullOrEmpty(urlArgs[0]))
            {
                return(part);
            }

            IIterableFile fileNode = part;

            for (int index = 0; index < urlArgs.Length - 1; index++)
            {
                if (fileNode == null)
                {
                    throw new FileNotFoundException($"Can't find file {urlArgs[index]}-{urlArgs.Aggregate((a,b) => $"{a}/{b}")}");
                }
                fileNode = fileNode.Children.FirstOrDefault(p => p.Name == urlArgs[index]) as IIterableFile;
            }
            return(fileNode.Children.FirstOrDefault(p => p.Name == urlArgs[urlArgs.Length - 1]));
        }