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

时间:2015-06-17 17:10:17

标签: telerik asyncfileupload

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

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

1 个答案:

答案 0 :(得分:0)

这个答案假设你在AsyncUpload1_FileUploaded子程序中有这个代码。我正在做这个假设,因为我能够用那里的代码重新创建你的问题。

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

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

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