0

我正在尝试读取文本文件中的列表并将文件源移动到目标目录。但是当我尝试使用 for 语句读取这个文件时,它给了我以下错误:

foreach 语句不能对类型变量进行操作, System.IO.StreamReader因为System.IO.StreamReader它不包含GetEnumerator

不确定这是否是文件创建的问题,或者这里需要一些替代方法来读取然后移动文件。

请指教。

这是代码:

static void Main(string[] args)
{

    create_source_fileList();
    string source_dir = System.Configuration.ConfigurationSettings.AppSettings["SourceDir"];

    string target_dir = System.Configuration.ConfigurationSettings.AppSettings["TargetDir"];

    string dpath = target_dir + "Diff" + ".txt";

    TextWriter df = new StreamWriter(dpath);

    DirectoryInfo sourceinfo = new DirectoryInfo(source_dir);

    DirectoryInfo targetinfo = new DirectoryInfo(target_dir);

    string[] source_f_list  = File.ReadAllLines(target_dir + "Source_File_List.txt");
    string[] target_f_list = File.ReadAllLines(target_dir + "Target_File_List.txt");

    IEnumerable<String> file_list_diff = source_f_list.Except(target_f_list);

    string diff_list = string.Join(Environment.NewLine, file_list_diff);


    df.WriteLine(string.Join(Environment.NewLine, file_list_diff));
    df.Close();


    System.IO.StreamReader file_read = new System.IO.StreamReader(target_dir + "\\Diff.txt");


    if (!Directory.Exists(targetinfo.FullName))
    {
        Directory.CreateDirectory(targetinfo.FullName);
    }



    /*foreach (FileInfo fi in sourceinfo.GetFiles())

    {

            fi.CopyTo(Path.Combine(targetinfo.ToString(), fi.Name), true);
    }*/



    foreach (string file in file_read)  // Error With For Loop
    {


    }

    create_target_fileList();

}
4

1 回答 1

4

是的,你不能foreach直接使用 with StreamReader。它没有foreach工作所需的成员。

选项:

  • 改用File.ReadLines

    string path = Path.Combine(targetDir, "Diff.txt");
    foreach (string file in File.ReadLines(path))
    {
        // ...
    }
    
  • 反复调用ReadLine你的StreamReader,它应该在一个using语句中,并且只需使用File.OpenText

    string path = Path.Combine(targetDir, "Diff.txt");
    using (TextReader reader = File.OpenText(path))
    {
        string file;
        while ((file = reader.ReadLine()) != null)
        {
            // ...
        }
    }
    

请注意,我也让变量名更简洁一些 - C# 中惯用的变量名类似于sourceFileList而不是source_f_list.

此外,我鼓励你File.WriteAllText早点使用,而不是你使用的方式df(没有using声明,并且比你需要的更早地打开它)。

于 2013-06-13T05:44:17.847 回答