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)
这个答案假设你在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);
}