我正在使用asp.net项目,用户可以将文件上传到服务器。我想用原始名称保存文件,但是如果已经存在同名文件我怎样才能在括号中生成带有数字的文件名,就像windows一样?
文件上传到特定文件夹,并以其客户端名称本身保存。因此,如果上传了名为myimage.jpg的文件并且服务器中已存在同名文件,我需要将其重命名为myimage(1).jpg或者如果'myimage.jpg'重命名为'myimage(n).jpg '存在,我需要将其重命名为myimage(n + 1).jpg。
搜索和生成此类文件名的最佳方法是什么?我的第一个猜测是使用linq和正则表达式DirectoryInfo.EnumerateFiles()
,但这是一个很好的方法吗?
答案 0 :(得分:5)
如果不必按上传日期/时间显示具有相同原始名称的文件,则只需将System.Guid.NewGuid()。ToString()附加到文件名即可。
答案 1 :(得分:3)
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.
}
}
答案 2 :(得分:0)
您不需要LINQ或正则表达式。
如果原始文件名存在,请在名称后附加(1)
如果存在,请将(2)
附加到(原始)名称
等等...