代码之家  ›  专栏  ›  技术社区  ›  Tys

C如何在不使用大量内存的情况下递归地循环一大组文件夹和文件

  •  3
  • Tys  · 技术社区  · 15 年前

    我想索引我所有的音乐文件并将它们存储在数据库中。 我有这个功能,我称之为回避,从我的音乐驱动的根源。

    start > ReadFiles(C:\music\);
    
    ReadFiles(path){
       foreach(file)
          save to index;
    
       foreach(directory)
          ReadFiles(directory);
    }
    

    这很好,但是当运行程序时,所使用的内存量会不断增长,并且..最后,我的系统内存耗尽。

    有没有人有更好的方法,不需要4GB内存来完成这项任务?

    祝你好运,泰斯

    5 回复  |  直到 8 年前
        1
  •  9
  •   Thomas Levesque    15 年前

    Directory.EnumerateFiles

    void ReadFiles(string path)
    {
        IEnumerable<string> files =
            Directory.EnumerateFiles(
                path,
                "*",
                SearchOption.AllDirectories); // search recursively
    
        foreach(string file in files)
            SaveToIndex(file);
    }
    
        2
  •  2
  •   Ben Voigt    15 年前

    . ..

        3
  •  1
  •   Alxandr    15 年前

    Queue<string> dirs = new Queue<string>();
    dirs.Enqueue("basedir");
    while(dirs.Count > 0) {
        foreach(directory)
            dirs.Enqueue(directory);
        ReadFiles();
    }
    
        4
  •  0
  •   matsolof    12 年前

    public static List<string> getFiles(string path, List<string> files)
    {
        IEnumerable<string> fileInfo = null;
        IEnumerable<string> folderInfo = null;
        try
        {
            fileInfo = Directory.EnumerateFiles(str);
        }
        catch
        {
    
        }
        if (fileInfo != null)
        {
            files.AddRange(fileInfo);
            //recurse through the subfolders
            fileInfo = Directory.EnumerateDirectories(str);
            foreach (string s in folderInfo)
            {
                try
                {
                    getFiles(s, files);
                }
                catch
                {
    
                }
            }
        }
        return files;
    }
    

    List<string> files = new List<string>();
    files = folder.getFiles(path, files);
    

    http://msdn.microsoft.com/en-us/library/vstudio/bb513869.aspx

    http://social.msdn.microsoft.com/Forums/vstudio/en-US/ae61e5a6-97f9-4eaa-9f1a-856541c6dcce/directorygetfiles-gives-me-access-denied?forum=csharpgeneral

    推荐文章