我正在使用 ASP.NET 项目,用户可以将文件上传到服务器。我想用原来的文件名保存文件,但是如果同名文件已经存在,如何像Windows那样生成一个带数字的文件名?
文件上传到特定文件夹并以其客户端名称本身保存。因此,如果上传了名为 myimage.jpg 的文件,并且服务器中已存在同名文件,我需要将其重命名为 myimage(1).jpg 或将 'myimage.jpg' 重命名为 'myimage (n).jpg' 存在,我需要将其重命名为 myimage(n+1).jpg.
搜索和生成此类文件名的最佳方法是什么?我的第一个猜测是使用 LINQ 和正则表达式而不是
DirectoryInfo.EnumerateFiles()
,但这是一个好的方法吗?
如果具有相同原始名称的文件不必按上传日期/时间排序,您可以简单地将 System.Guid.NewGuid().ToString() 附加到文件名。
public static object lockObject = new object();
void UploadFile(...)
{
//-- other code
lock (lockObject)
{
int i = 1;
string saveFileAs = "MyFile.txt";
while (File.Exists(saveFileAs))
{
string fileNameWithoutExt = Path.GetFileNameWithoutExtension(saveFileAs);
string ext = Path.GetExtension(saveFileAs)
saveFileAs = String.Concat(fileNameWithoutExt, "(", i.ToString(), ")", ext);
i++;
}
//-- Now you can save the file.
}
}
您不需要 LINQ 或正则表达式。
如果原始文件名存在,请在名称后附加
(1)
。(2)
附加到(原始)名称。