我从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'
答案 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);