在重命名期间将DateTime添加到filename

时间:2013-12-20 00:54:49

标签: c# asp.net-mvc-5

我找到了许多人创建新文件并添加当前Datetime然后文件扩展名的示例,但我想要做的是查看文件当前是否存在以及是否只是将当前DateTime添加到文件中名称,但我无法弄清楚如何维护文件扩展名。到目前为止我的当前代码:

public class FileUploadHelper
{
    private CoreSiteContext db = new CoreSiteContext();

    public Int64 UploadSiteImage(string ContainerName, string NewFileName, HttpPostedFile UploadedFile)
    {
        string SavePath = @"F:\FFInfoImages\" + ContainerName + @"\";

        if (System.IO.File.Exists(SavePath + NewFileName))
        {
            System.IO.File.Move(SavePath + NewFileName, SavePath + NewFileName + DateTime.Now.ToString("MM_dd_yyyy_hh_mm_ss"));
            UploadedFile.SaveAs(SavePath + NewFileName);
        }
        else
        {
            UploadedFile.SaveAs(SavePath + NewFileName);
        }

        using (db)
        {
            File NewFile = new File()
            {
                FileName = NewFileName,
                ContentType = UploadedFile.ContentType
            };

            db.Files.Add(NewFile);
            db.SaveChanges();
            return NewFile.ID;
        }
    }
}

4 个答案:

答案 0 :(得分:4)

看起来好像NewFileName字符串变量没有传入文件扩展名,否则大部分都应该有效。为什么不从UploadedFile获取扩展名?

string strNewPath = SavePath + NewFileName + Path.GetExtension(UploadedFile.FileName);

if (System.IO.File.Exists(strNewPath)) {
  System.IO.File.Move(strNewPath, SavePath + NewFileName + DateTime.Now.ToString("MM_dd_yyyy_hh_mm_ss") + Path.GetExtension(UploadedFile.FileName));
  UploadedFile.SaveAs(strNewPath);
}
else {
  UploadedFile.SaveAs(strNewPath);
}

using (db) {
  File NewFile = new File() {
    FileName = NewFileName + Path.GetExtension(UploadedFile.FileName),
    ContentType = UploadedFile.ContentType
  };

  db.Files.Add(NewFile);
  db.SaveChanges();

  return NewFile.ID;
}

答案 1 :(得分:3)

.NET具有内置方法,可以安全地提取文件名的不同部分(分别是文件名和扩展名)。 Path名称空间中存在System.IO

假设NewFileName类似于myfilename.txt,您可以像这样使用它(未经测试):

if (File.Exists(SavePath + NewFileName))
{
    var name = Path.GetFileNameWithoutExtension(NewFileName);
    var ext = Path.GetExtension(NewFileName);

    File.Move(SavePath + NewFileName,
        SavePath + name + DateTime.Now.ToString("MM_dd_yyyy_hh_mm_ss") + ext);
}
UploadedFile.SaveAs(SavePath + NewFileName);

答案 2 :(得分:2)

以下方法完全解决了您的问题

System.IO.Path.GetExtension("Path");

最好先使用System.IO.Path.GetFileNameWithoutExtension("Path")获取当前没有扩展名的文件名,然后添加日期时间,然后再添加扩展名。

答案 3 :(得分:1)

您可以使用Path.GetExtension()方法来识别文件扩展名。

试试这个:

   String strExtension=IO.Path.GetExtension(SavePath + NewFileName);  
   if (System.IO.File.Exists(SavePath + NewFileName))
    {
        System.IO.File.Move(SavePath + NewFileName, SavePath + NewFileName +  DateTime.Now.ToString("MM_dd_yyyy_hh_mm_ss")+strExtension);
        UploadedFile.SaveAs(SavePath + NewFileName);
    }
    else
    {
        UploadedFile.SaveAs(SavePath + NewFileName);
    }