2015-06-17 104 views
1

Telerik的RadAsyncUpload控件用於將文件上傳到文件系統或共享文件夾。如果文件已經存在,我們需要在文件末尾添加一個計數器值。Telerik RadAsyncUpload控制 - 重命名多個文件名(如果已經存在)

我寫的邏輯來添加一個名爲counter到文件名的整數值,但是這個代碼失敗,如果讓我選擇多個文件:

foreach (UploadedFile file in AsyncUpload1.UploadedFiles) 
{ 
    string targetFolder = AsyncUpload1.TargetFolder; 
    string targetFileName = System.IO.Path.Combine(targetFolder, 
     file.GetNameWithoutExtension() + counter.ToString() + file.GetExtension()); 

    while (System.IO.File.Exists(targetFileName)) 
    { 
     counter++; 
     targetFileName = System.IO.Path.Combine(targetFolder, 
     file.GetNameWithoutExtension() + counter.ToString() + file.GetExtension()); 
    } 
    file.SaveAs(targetFileName); 
} 

我想,如果他們在文件中已經存在重命名多個文件分享。

+0

什麼是錯誤訊息您收到? –

+0

此代碼位於何處? –

+0

你有機會測試答案嗎?如果是這樣,我想知道它是否適合你。 –

回答

0

這個答案假設你在AsyncUpload1_FileUploaded子程序中有這樣的代碼。我正在做這個假設,因爲我能夠用那裏的代碼重新創建你的問題。

如果是這種情況,則會爲每個上傳的文件觸發此事件。當您選擇文件時,它會在\ App_Data \ RadUploadTemp中創建一個臨時文件。當您設置TargetFolder屬性時(如果未根據this Telerik forum設置此屬性,則不會立即刪除),AsyncUpload1_FileUploaded會觸發此文件。

你的代碼循環遍歷每個文件,但是當事件觸發第二個文件時,第一個文件已經被刪除而導致錯誤。

由於每個文件都會觸發AsyncUpload1_FileUploaded,所以不需要遍歷每個文件。刪除您For Each聲明,聲明/套file像這樣:Dim file As UploadedFile = e.File

protected void AsyncUpload1_FileUploaded(object sender, FileUploadedEventArgs e) 
{ 
    int counter = 0; 
    UploadedFile file = e.File; //Replace your For Each statement with this line 
    string targetFolder = AsyncUpload1.TargetFolder; 
    string targetFileName = System.IO.Path.Combine(targetFolder, file.GetNameWithoutExtension() + counter.ToString() + file.GetExtension()); 
    while (System.IO.File.Exists(targetFileName)) { 
     counter += 1; 
     targetFileName = System.IO.Path.Combine(targetFolder, file.GetNameWithoutExtension() + counter.ToString() + file.GetExtension()); 
    } 
    file.SaveAs(targetFileName); 
} 
相關問題