c# - 从 DirectoryInfo.GetFiles 返回的 FileInfo 没有指向文件?

标签 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;

Could not find file 'D:\C-Sharp\Search_Text_In_Files\Search_Text_In_Files\Search_Text_In_Files\bin\Debug\Logger.cs'

最佳答案

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

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

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

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

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

}

关于c# - 从 DirectoryInfo.GetFiles 返回的 FileInfo 没有指向文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37830260/

相关文章:

c# - 编写 Windows Web 服务但不确定使用哪种语言?

c# - 用于缺少 Microsoft.Net.Compilers 的项目的 Roslyn 编译器版本

c# - 提取 2 美元符号之间的字符串

windows - 如何将命令行指令本身转储到输出文件中?

c# - 在多个文件中搜索多个字符串

C# - SQL Server - ?参数和 Oledb

c# - 如何在 C# 中的这种奇怪情况下创建通用列表

c# - 添加代表 : unexpected results when adding two Func<T, TResult>

.net - Azure应用程序洞察请求响应统计与客户端的实际页面响应时间

file - Perl Config::IniFiles - 如何创建 ini 文件 'if not exists' ? WriteConfig 方法失败并出现错误