生成括号内带有数字的文件名

问题描述 投票:0回答:3

我正在使用 ASP.NET 项目,用户可以将文件上传到服务器。我想用原来的文件名保存文件,但是如果同名文件已经存在,如何像Windows那样生成一个带数字的文件名?

文件上传到特定文件夹并以其客户端名称本身保存。因此,如果上传了名为 myimage.jpg 的文件,并且服务器中已存在同名文件,我需要将其重命名为 myimage(1).jpg 或将 'myimage.jpg' 重命名为 'myimage (n).jpg' 存在,我需要将其重命名为 myimage(n+1).jpg.

搜索和生成此类文件名的最佳方法是什么?我的第一个猜测是使用 LINQ 和正则表达式而不是

DirectoryInfo.EnumerateFiles()
,但这是一个好的方法吗?

c# asp.net filesystems
3个回答
5
投票

如果具有相同原始名称的文件不必按上传日期/时间排序,您可以简单地将 System.Guid.NewGuid().ToString() 附加到文件名。


2
投票
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.
    }
}

0
投票

您不需要 LINQ 或正则表达式。

如果原始文件名存在,请在名称后附加

(1)

如果存在,请将
(2)
附加到(原始)名称。
等等...

© www.soinside.com 2019 - 2024. All rights reserved.