如果存在上一组文件,则自动增加文件名的结尾

时间:2013-07-12 23:09:12

标签: c#

我需要创建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是函数(未包含)中使用的字符串,它将创建文件。

1 个答案:

答案 0 :(得分: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来计算现有文件名。