【问题标题】:Count files in directories AND subdirectories? iPhone计算目录和子目录中的文件?苹果手机
【发布时间】:2011-02-19 18:24:46
【问题描述】:

我正在尝试计算目录中的整个文件,包括子目录。这是我必须计算第一个文件夹中的文件:

-(NSString *)numberOfPhotos
{
    NSString *MyPath = @"/rootdirectory/"; 
    NSArray *directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath:MyPath]; 

    return [NSString stringWithFormat:@"%d", [directoryContent count]];
}

我在想可能是这样的

for (file in folder){
    [file count]
{

但似乎不起作用。

更新: 其实很简单:

NSDirectoryEnumerator *subs = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:musicPath error:nil];

【问题讨论】:

    标签: iphone file count nsfilemanager subdirectory


    【解决方案1】:

    你在正确的轨道上。你需要一个递归方法。您传入一个目录,该方法会抓取目录中的所有文件,然后检查每个文件以查看它是否是目录。在这里,您将有一个 for 循环来检查当前对象是否为目录。如果它是一个目录,那么它会用目录名来调用它自己。如果不是,它将计数器加一并继续。

    目前无法发布代码,但您应该这样做。

    【讨论】:

    • 我发布了一些伪代码,以便您可以在另一个答案中看到递归算法。
    • +1,挑剔的角落:你并不完全需要一个递归算法来遍历一棵树,但它肯定更容易;-)
    【解决方案2】:

    看看能不能用iPad键盘写代码……用伪代码描述递归算法:

    int fileCount(directory)
    {
        int count = 0;
        for (file in directory)
        {
            if (isDirectory(file))
                count += fileCount(file);
            else
                count++;
        }
        return count;
    }                
    

    【讨论】:

      【解决方案3】:
      NSDirectoryEnumerator *subs = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:musicPath error:nil];
      

      【讨论】:

      • 它将返回一个 NSArray 而不是 NSDirectoryEnumerator 的对象
      • NSArray *subs = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:musicPath error:nil];
      猜你喜欢
      • 2015-06-28
      • 2016-05-16
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      相关资源
      最近更新 更多