0

私の要件は、一定の間隔を置いてファイルをあるディレクトリから別のディレクトリに移動することです。したがって、基本的なコピーは機能しますが、次の間隔では新しいファイルのみを移動したいと考えています。

以下は私のアプローチです:

ターゲットの場所にソースとターゲットの両方のディレクトリのファイル リストを作成しています。アイデアは、これら 2 つのファイルの違いに基づいており、最後の反復から新しいファイルのみをコピーします。

最初の繰り返しでは、すべてをコピーすることを示す空のファイルがターゲットに作成されます。しかし、私のファイル比較はここで問題を抱えています。以下のコードのロジックに基づいて、この例外 "System.Linq.Enumerable+d__99`1[System.String]" を作成しています。

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

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);


    df.WriteLine(file_list_diff);
    df.Close();


    if (!Directory.Exists(targetinfo.FullName))
    {
        Directory.CreateDirectory(targetinfo.FullName);
    }
    foreach (FileInfo fi in sourceinfo.GetFiles())
    {

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

    create_target_fileList();

}

この問題を解決するには助けが必要です。また、このアプローチはループで機能し、差分ファイルの名前のみを繰り返します。

ありがとう!!

4

1 に答える 1

0

例外を作成していません。むしろ、インスタンスを呼び出しToStringた結果を書き込んでいます。IEnumerable<string>以下を置き換える必要があります。

df.WriteLine(file_list_diff);

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

または、.NET 4 より前:

df.WriteLine(string.Join(Environment.NewLine, file_list_diff.ToArray()));
于 2013-06-12T10:50:29.230 に答える