0

x 個のファイル (セット) を作成する必要がありますが、最初に類似した名前のファイルが存在するかどうかを確認する必要があります。

たとえば、tiftest1.tif、tiftest2.tif、... が存在し、tiftest を同じディレクトリに再度書き込む必要があります。ファイル名の末尾に _x を追加したいと思います。x は、セットを作成するたびに自動インクリメントされる数値です。したがって、tiftest1_1.tif、tiftest2_1.tif、tiftest1_2.tif、tiftest2_2.tif、tiftest1_3.tif、tiftest2_3.tif などを使用できます。

これが私がこれまでに持っているものです:

...
DirectoryInfo root = new DirectoryInfo(fileWatch.Path);
FileInfo[] exist = root.GetFiles(fout + "*.tif");

if (exist.Length > 0)
{
    int cnt = 0;
    do
    {
        cnt++;
    DirectoryInfo root1 = new DirectoryInfo(fileWatch.Path);
        FileInfo[] exist1 = root.GetFiles(fout + "*" + "_" + cnt + ".tif");

        arg_proc = "-o " + "\"" + fileWatch.Path
        + "\\" + fout + "%03d_" + cnt + ".tif\" -r " + "\"" + openDialog.FileName + "\"";

    } while (exist1.Length > 0); //exist1 is out of scope so this doesn't work
}
else
{

    arg_proc = "-o " + "\"" + fileWatch.Path
        + "\\" + fout + "%03d.tif\" -r " + "\"" + openDialog.FileName + "\"";
}
...

exist1.length は範囲外であるため、ループは継続的に実行されます。これを修正する方法がわかりません。私の方法は、最初にディレクトリをスキャンして一致するものを探し、配列の長さが 0 より大きいかどうかを確認することでした。0 より大きい場合、一致が見つからなくなるまで _x が自動インクリメントされます。arg_proc は、ファイルを作成する関数 (含まれていません) で使用される文字列です。

4

1 に答える 1

0

exist変数を再利用できませんか?

FileInfo[] exist = root.GetFiles(fout + "*.tif");

if (exist.Length > 0)
{
    int cnt = 0;
    do
    {
        cnt++;
        DirectoryInfo root1 = new DirectoryInfo(fileWatch.Path);
        exist = root.GetFiles(fout + "*" + "_" + cnt + ".tif");

        arg_proc = "-o " + "\"" + fileWatch.Path + "\\" 
        + fout + "%03d_" + cnt + ".tif\" -r " + "\"" + openDialog.FileName + "\"";

    } while (exist.Length > 0);
}
...

このように、exist範囲外になることはありません。カウンターをインクリメントし始めたら、ファイルの元のリストは必要ないように見えたので、その場合は、再利用existして既存のファイル名をカウントし続けることができます。

于 2013-07-13T00:50:12.700 に答える