检查目录或子目录中是不是存在文件[重复]

Posted

技术标签:

【中文标题】检查目录或子目录中是不是存在文件[重复]【英文标题】:Check if a file exist in directory or subdirectory [duplicate]检查目录或子目录中是否存在文件[重复] 【发布时间】:2013-04-07 10:16:55 【问题描述】:

我想检查一个文件是否存在于目录或子目录中。

string[] filePaths = Directory.GetFiles(padserver, "*", SearchOption.AllDirectories);
try 
    DataContainer.bestaatal = false;
    lusfilebestaat = 0;
    while (DataContainer.bestaatal == false) 
        filePaths[lusfilebestaat] = Path.GetFileName(filePaths[lusfilebestaat]);
        if (filePaths[lusfilebestaat] == bestandsnaam) 
            DataContainer.bestaatal = true;
        
        lusfilebestaat = lusfilebestaat + 1;
    

这可行,但速度很慢,因为我的服务器上有很多文件。

有没有人可以解决这个问题?

【问题讨论】:

bestandsnaam 是什么? 这是文件名 在 SO 中发布问题之前请先进行研究 我也阅读了其他论坛主题,但我没有为我的项目找到解决方案 您可以通过 P/Invoking FindFirstFileEx 轻松完成 【参考方案1】:

这可能对你有帮助

internal static bool FileOrDirectoryExists(string name)

   return (Directory.Exists(name) || File.Exists(name))

或者另一种方法是自己编写搜索功能,其中一个应该可以工作:

private bool FileExists(string rootpath, string filename)

    if(File.Exists(Path.Combine(rootpath, filename)))
        return true;

    foreach(string subDir in Directory.GetDirectories(rootpath, "*", SearchOption.AllDirectories))
    
        if(File.Exists(Path.Combine(rootpath, filename)))
        return true;
    

    return false;


private bool FileExistsRecursive(string rootPath, string filename)

    if(File.Exists(Path.Combine(rootPath, filename)))
        return true;

    foreach (string subDir in Directory.GetDirectories(rootPath))
    
        return FileExistsRecursive(subDir, filename);
    

    return false;

第一个仍然首先提取所有目录名称,因此如果有很多子目录并且文件靠近顶部,则可能会很慢。

第二种是递归的,在“最坏情况”的情况下可能会更慢,但如果有许多嵌套的子目录并且文件位于***目录中,则会更快。

【讨论】:

嗯..你刚刚直接复制了Achs answer?【参考方案2】:

使用System.IO.File.Exists() 方法。见msdn。

【讨论】:

虽然这也扫描子目录? @Joeri 您为其提供的路径必须是完整的。 @Joeri 您必须传递文件的路径。 test.txt 绝对不会为你搜索子目录。 我有 100 多个子文件夹。那样不行吗? @Joeri 你到底想做什么?搜索您不知道它在哪里的特定文件?在这种情况下,“慢”是你必须忍受的(除非你的服务器有很多 SSD)。但是,如果您知道它应该在哪里,那么这是最好的答案。

以上是关于检查目录或子目录中是不是存在文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

检查文件夹中是不是存在文件[重复]

需要检查目录中是不是存在.gz文件[重复]

检查目录是不是存在并计算与其中模式匹配的文件[重复]

检查目录是不是不存在[重复]

如何使用 C++ 和 winAPI 检查目录是不是存在 [重复]

如何检查目录是不是存在?