0

テキスト ファイルのリストを読み取り、ファイル ソースをターゲット ディレクトリに移動しようとしています。しかし、for ステートメントを使用してこのファイルを読み取ろうとすると、次のエラーが発生します。

foreach ステートメントは、 のパブリック定義が含まれていないSystem.IO.StreamReaderため、 型の変数を操作できません System.IO.StreamReaderGetEnumerator

これがファイル作成の問題なのか、ファイルを読み取って移動するためにここで別の方法が必要なのかはわかりません。

お知らせ下さい。

コードは次のとおりです。

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はい、直接使用することはできませんStreamReader。機能するために必要なメンバーがありませんforeach

オプション:

  • File.ReadLines代わりに使用してください:

    string path = Path.Combine(targetDir, "Diff.txt");
    foreach (string file in File.ReadLines(path))
    {
        // ...
    }
    
  • ReadLineあなたのを繰り返し呼び出します。これはステートメントStreamReaderにある必要があり、次を使用して簡単に取得できます。usingFile.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 に答える