从DirectoryInfo.GetFiles返回的FileInfo不指向文件?

时间:2016-06-15 08:39:11

标签: c# .net file

我从backgroundworker dowork事件中调用此方法

void WalkDirectoryTree(System.IO.DirectoryInfo root)
{
    try
    {
        files = root.GetFiles("*.cs");
        int Vara = File.ReadAllText(files[0].Name).Contains("namespace") ? 1 : 0;
    }
    catch (UnauthorizedAccessException e)
    {
    }
    catch (System.IO.DirectoryNotFoundException e)
    {
        Console.WriteLine(e.Message);
    }    
}

问题是我在线上遇到异常:

int Vara = File.ReadAllText(files[0].Name).Contains("namespace") ? 1 : 0;
  

无法找到文件'D:\ C-Sharp \ Search_Text_In_Files \ Search_Text_In_Files \ Search_Text_In_Files \ bin \ Debug \ Logger.cs'

2 个答案:

答案 0 :(得分:3)

使用FileInfo.Name您只获取文件名,而不是完整路径。

因此,您尝试读取相对于当前目录的文件,该文件不存在。

获取完整路径,即FileInfo.FullName而不是FileInfo.Name

如果你想读取所有文件,你应该遍历文件而不是只读取第一个文件(files[0]),后者最后是危险的,因为如果没有找到文件,那将抛出。

foreach (var fileInfo in files)
{
    int Vara = File.ReadAllText(fileInfo.FullName).Contains("namespace") ? 1 : 0;

}

答案 1 :(得分:2)

您应该将Name替换为FullName FileInfo对象的void WalkDirectoryTree(System.IO.DirectoryInfo root) { try { FileInfo[] files = root.GetFiles("*.cs"); foreach(FileInfo fileInfo in files) { int Vara = File.ReadAllText(fileInfo.FullName).Contains("namespace") ? 1 : 0; // do something with Vara } } catch (UnauthorizedAccessException e) { } catch (System.IO.DirectoryNotFoundException e) { Console.WriteLine(e.Message); } }

new Lazy<T>(() => InitConfig);

参考FileInfo.FullName Property