我已经在这里搜索了解决方案,但我没有找到任何解决方案。 :( 所以,我的问题是我试图获取目录中的所有子目录,然后我想在每个子目录中读出一个文件。
这是我的代码:(我要读出的文件名为" 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,因为它们尚未初始化。
答案 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();
}
}
}
}