Telerik RadAsyncUpload 控件 - 重命名多个文件名(如果已存在)

Telerik RadAsyncUpload control - Rename multiple files names if already exist

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);
 }

我想重命名文件共享中已存在的多个文件。

此答案假设您在 AsyncUpload1_FileUploaded 子例程中有此代码。我做出这样的假设是因为我能够使用其中的代码重现您的问题。

如果是这种情况,每个上传的文件都会触发此事件。当您 select 文件时,它会在 \App_Data\RadUploadTemp 中创建一个临时文件。当您设置了 TargetFolder 属性 时,该文件在 AsyncUpload1_FileUploaded 触发后被删除(如果未根据 this Telerik forum 设置此 属性,则该文件不会立即删除)。

您的代码循环遍历每个文件,但是当第二个文件触发事件时,第一个文件已被删除,这导致了错误。

不需要遍历每个文件,因为 AsyncUpload1_FileUploaded 对每个文件都会触发。像这样删除 For Each 语句和 declare/set fileDim 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);
}