asp.net 生成一个括号内带有数字的文件名

fgw7neuy  于 2023-11-20  发布在  .NET
关注(0)|答案(3)|浏览(114)

我正在使用ASP.NET项目,用户可以将文件上传到服务器。我想用其原始名称保存文件,但如果同名文件已经存在,我如何生成一个文件名,括号中有一个数字,就像Windows一样?
文件被上传到一个特定的文件夹,并以其客户端名称本身保存。因此,如果上传了一个名为 myimage.jpg 的文件,并且服务器中已经存在同名文件,则需要将其重命名为 myimage(1).jpg,或者如果存在'myimage(n).jpg',则需要将其重命名为 myimage(n+1).jpg
搜索和生成这样的文件名的最佳方法是什么?我的第一个猜测是使用LINQDirectoryInfo.EnumerateFiles()上的正则表达式,但这是一个好方法吗?

bnl4lu3b

bnl4lu3b1#

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

ttisahbt

ttisahbt2#

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.
    }
}

字符串

ht4b089n

ht4b089n3#

你不需要LINQ或正则表达式。
如果原始文件名存在,则将(1)附加到名称。
如果存在,将(2)附加到(原始)名称。
等等......

相关问题