DirectoryInfo - FileNotFound虽然存在文件

时间:2014-03-04 15:28:36

标签: c# .net

我已经在这里搜索了解决方案,但我没有找到任何解决方案。 :( 所以,我的问题是我试图获取目录中的所有子目录,然后我想在每个子目录中读出一个文件。

这是我的代码:(我要读出的文件名为" info.txt")

string projectsPath = Path.Combine(Program.Path, "Projects");
string projectPath = Path.Combine(projectsPath, ProjectName);
string packagesFolder = Path.Combine(projectPath, "Packages");

DirectoryInfo dInfo = new DirectoryInfo(packagesFolder);
DirectoryInfo[] subDirs = dInfo.GetDirectories();

foreach (DirectoryInfo dir in subDirs)
{
    string packageInfo = String.Empty;
    string[] information;

    if (dir.EnumerateFiles().Any(item => item.Name == "info.txt"))
    {
        FileInfo file = dir.EnumerateFiles().First(item => item.Name == "info.txt");

        using (StreamReader sr = file.OpenText())
        {
            packageInfo = sr.ReadToEnd();
        }
    }

所以,在顶部我声明路径(它们是正确的),然后我想获取 packagesFolder 的所有目录并迭代它们。 然后我想获取名为 info.txt 的文件并将其读出并将内容保存在 packageInfo - 变量中。

现在的问题是它永远不会到达If-query,因为他找不到该文件。 我调试了它并查看了变量...我复制了 dir.FullName -path并将其粘贴到Windows资源管理器中并打开了文件。

我还应该有权限阅读那里,我检查过,或者我怎么能非常确切地检查? 我使用DirectoryInfo错误或我的错误在哪里?当然,如果整个目录存在并且它说" false",我也尝试获得一些输出,但是,正如我所说,如果我在资源管理器中准确地粘贴此路径,它会打开文件。

帮助将不胜感激。

以下是路径:

subDirs 是一个DirectoryInfos数组,内容为: 0.1.0.0 packagesFolder 中唯一文件夹的名称)。

文件未初始化,因为从未到达查询。 (FileNotFound)

所有以下类型的变量" string"为null,因为它们尚未初始化。

3 个答案:

答案 0 :(得分:1)

尝试:

var file = dir.GetFiles("info.txt", SearchOption.AllDirectories).First();

或者,您可以在GetFiles的位置使用EnumerateFiles。

编辑: 检查infoFiles之后是否包含任何内容:

string projectsPath = Path.Combine(Program.Path, "Projects");
string projectPath = Path.Combine(projectsPath, ProjectName);
string packagesFolder = Path.Combine(projectPath, "Packages");

DirectoryInfo dInfo = new DirectoryInfo(packagesFolder);
var infoFiles = dInfo.GetFiles("info.txt",SearchOption.AllDirectories);

答案 1 :(得分:1)

问题解决了。问题是我手动创建文本文件只是为了测试它,我给它起了名字“info.txt”,但它已经是一个文本文件 - >名称应该是“info.txt.txt”然后。所以,.NET不会说谎,但谢谢你的帮助!

答案 2 :(得分:0)

文件夹和/或文件的名称不是任何特殊名称,保留关键字?

跟踪这个如何用新位置,样本文件夹结构和不同文件名尝试同样的事情。

PS。 我使用你的代码 - 在linqpad中,它像charm一样工作(创建文件夹结构来模仿和几个文件),它让你感到惊讶。

这是在我的机器上进行少量修改的代码

void Main()
{
     string projectsPath = Path.Combine(@"D:\New folder", "Stackoverflow");
        string projectPath = Path.Combine(projectsPath);
        string packagesFolder = Path.Combine(projectPath, "Source");

    DirectoryInfo dInfo = new DirectoryInfo(packagesFolder);
    DirectoryInfo[] subDirs = dInfo.GetDirectories();

    foreach (DirectoryInfo dir in subDirs)
    {
        string packageInfo = String.Empty;
        string[] information;

        if (dir.EnumerateFiles().Any(item => item.Name == "test.txt"))
        {
            FileInfo file = dir.EnumerateFiles().First(item => item.Name == "test.txt");

            using (StreamReader sr = file.OpenText())
            {
                packageInfo = sr.ReadToEnd();
            }
        }
    }
}

enter image description here