检查目录或子目录中是否存在文件

时间:2013-04-15 10:22:01

标签: c# file-exists

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

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;
    }
}

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

有没有人有解决方案呢?

2 个答案:

答案 0 :(得分:2)

使用System.IO.File.Exists()方法。请参阅msdn

答案 1 :(得分:0)

这可能对您有所帮助

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;
}

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

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