检查列表中的文件是否存在

时间:2014-03-09 14:18:52

标签: c# list file

我有一个名为list.txt的文件,在这个文件中我有一个像这样的文件路径列表:

Directory1/DirectoryZ/file.txt
Directory2/DirectoryX/file1.txt
Directory3/DirectoryY/file2.txt
etc... 

我尝试过这样的事情:

if (File.Exists("list.txt"))
{
    string[] files = File.ReadAllLines("list.txt");
    if (File.Exists(files.ToString()))
    {
        Console.WriteLine(files[1]);
    }
}
else
{
    Console.WriteLine("Cannot find som' files");
}

Console.ReadKey(true);

我的问题:

如何通过读取文件检查该特定路径中是​​否存在这些文件,然后在检查后是否缺少文件以引发错误?

P.S: 对不起,如果我的问题重复,我还没有找到像我一样的问题。

4 个答案:

答案 0 :(得分:2)

if (File.Exists("list.txt"))
{
    string[] files = File.ReadAllLines("list.txt");
    foreach(string fileName in files)
        if (File.Exists(fileName))
        {
            Console.WriteLine(fileName);
        }
        else
        {
            throw new FileNotFoundException(fileName);
        }
}
else
{
    Console.WriteLine("Cannot find som' files");
}

Console.ReadKey(true);

答案 1 :(得分:2)

一种不同的方法。获取不存在的所有文件名

    string fileList = @"d:\temp\list.txt";
    if (File.Exists(fileList))
    {
        var files = File.ReadAllLines(fileList).Where(x => !File.Exists(x));
        if(files.Count() > 0)
        {
            foreach(string missing in files)
               Console.WriteLine("File missing: " + missing);
            throw new FileNotFoundException("Some files are missing");
        }
    }
    else
    {
        Console.WriteLine("Cannot find list file");
    }

如果您不想获取遗失文件列表,可以将其更改为

    var file = File.ReadAllLines(fileList).FirstOrDefault(x => !File.Exists(x));
    if(file != null)
        throw new FileNotFoundException("File missing " + file.ToString());

答案 2 :(得分:0)

你需要迭代你的字符串数组:

string[] files = File.ReadAllLines("list.txt");
foreach (var file in files) {
    if (File.Exists(file))
    {
        Console.WriteLine(file);
    }
    else
    {
        Console.WriteLine("File not found for this path: {0}", file);
    }
}

答案 3 :(得分:0)

试试这个:

List<string> missedFiles = new List<string>();
if (File.Exists("list.txt"))
{
    foreach(var line in File.ReadLines("list.txt"))
    {
         if (File.Exists(line))
         {
             Console.WriteLine(files[1]);
         }
         else
         {
             missedFiles.Add(line);
         }
    }

    if(missedFiles.Count>0)
    {
        foreach(var file in missedFiles)
           Console.WriteLine(file);
    }
}

Console.ReadKey(true);