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