2014-05-05 45 views
0

下面的xml是图像输出的目的,使用下面的XML代码输出图像没有任何问题对我来说。如果File.Exists&生成一个序列号

public static void TIF(Document dc, SortedList<string, object> dcIndexes) 
{ 
    string str1 = dcIndexes["Document,name"].ToString(); 
    string str2 = dcIndexes["Document,age"].ToString(); 
    string str5 = dcIndexes["Document,status"].ToString(); 
    string str3 = Path.Combine(Config.OutputFolder, DateTime.Now.ToString("yyyyMMdd")); 
    if (!Directory.Exists(str3)) 
    Directory.CreateDirectory(str3); 
    string str4 = Path.Combine(str3, str1 + "_" + str2 + "_" + str5 + ".tif"); 
    DocumentHistory dh = (DocumentHistory) null; 
    string sourceFileName = ServiceES.FromSE(dc, out dh); 
    if (File.Exists(str4)) 
    File.Delete(str4); 
    File.Move(sourceFileName, str4); 
    PTrace.LogInformation("{0} - TIF - {1}", (object) dc.Title, (object) str4); 
} 

输出路径现在\YYYYMMDD\NAME_AGE_STATUS.tif 如果“名”是空的,形象的名字将变为:\YYYYMMDD\_AGE_STATUS.tif 现在的问题有就是我,还有在数据库中同年龄和状态。图像将仅替代第二张和第三张图片后的第一张图片,最后只剩下1张图片。

我可以知道如何在后面添加运行号码吗? 例如:\YYYYMMDD\_AGE_STATUS.tif (first image)\YYYYMMDD\_AGE_STATUS_001.tif (second image)遵循\YYYYMMDD\_AGE_STATUS_002.tif (third image). if can remove the "_" front of AGE will look better. example: \ YYYYMMDD \ AGE_STATUS_002.tif` 它似乎是因为下面的代码不允许:

if (File.Exists(str4)) 
    File.Delete(str4); 

我怎样才能增加一个序列号001,002,003后面如果重复TIF? 现在有10个文件名被复制。

_23_Single 
_23_Single 
_23_Single 
_23_Single 
_23_Single 
_23_Single 
_23_Single 
_23_Single 
_23_Single 
_23_Single 

成为:

_23_Single 
    _23_Single_001 
    _23_Single_002 
    _23_Single_003 
    _23_Single_004 
    _23_Single_005 
    _23_Single_006 
    _23_Single_007 
    _23_Single_008 
    _23_Single_009 

或成为:

23_Single 
23_Single_001 
23_Single_002 
23_Single_003 
23_Single_004 
23_Single_005 
23_Single_006 
23_Single_007 
23_Single_008 
23_Single_009 
+1

我编辑了您的标题。请参阅“[应该在标题中是否包含”标签“](http://meta.stackoverflow.com/questions/19190/)”,其中共识是“不,他们不应该”。 –

+1

请不要通过'str15'调用变量'str1'。适当的变量命名使得理解代码变得更容易。例如'str1'可以被称为'docName'。 – Tomalak

+0

感谢您的推荐 – user2523188

回答

2

你必须创建文件名,检查它,然后在文件存在的情况下进行更改。例如:

public static void TIF(Document dc, SortedList<string, object> dcIndexes) 
{ 
    string str1 = dcIndexes["Document,name"].ToString(); 
    string str2 = dcIndexes["Document,age"].ToString(); 
    string str5 = dcIndexes["Document,status"].ToString(); 
    string str3 = Path.Combine(Config.OutputFolder, DateTime.Now.ToString("yyyyMMdd")); 
    if (!Directory.Exists(str3)) 
     Directory.CreateDirectory(str3); 

    // ******** 
    // find first available file name 
    bool done = false; 
    int sequence = 0; 
    string str4; 
    string baseName = str1 + "_" + str2 + "_" + str5; 
    do 
    { 
     // change here *** 
     string fname = baseName; 
     if (sequence > 0) 
      fname = fname + "_" + sequence.ToString(); 
     // end of change *** 

     str4 = Path.Combine(str3, fname + ".tif"); 
     if (File.Exists(str4)) 
      ++sequence; 
     else 
      done = true; 
    } while (!done); 

    // str4 now contains the file name 
    // ******** 

    DocumentHistory dh = (DocumentHistory) null; 
    string sourceFileName = ServiceES.FromSE(dc, out dh); 
    if (File.Exists(str4)) 
     File.Delete(str4); 
    File.Move(sourceFileName, str4); 
    PTrace.LogInformation("{0} - TIF - {1}", (object) dc.Title, (object) str4); 
} 
+0

嗨,你可以直接编辑我的代码,我可以将其替换回我的地方。 ,因为我不知道应该在哪里粘贴你的代码到哪一行。 – user2523188

+0

@ user2523188:我已更新我的答案,以显示您将在哪里插入该代码。还要注意,如果你使用有意义的变量名称而不是'str1','str3'等,你的代码将会更容易理解。 –

+0

它的作品完美!但如果文件不存在,所有的文件名也被命名为_0?例如:name_age_status_0 – user2523188

0

我算了算,有多少文件已经存在

string fileName = // your file name 
int filesWithThisName = 1; 
while(File.Exists(fileName)) 
{ 
    fileName = Path.Combine(str3, str1 + "_" + str2 + "_" + str5 + "_" + i.ToString("D3") + ".tif"); 
    i++; 
} 
// save file 
+0

你可以通过调用'Directory.GetFiles'来做到这一点,尽管这会给你所有存在的文件,即使有差距。也就是说,如果'x_001'和'x_003'存在,而不是'x_002',你的代码将停在2处,'Directory.GetFiles'会给你所有的文件。 –