2014-05-05 42 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'會給你所有的文件。 –