2013-12-20 39 views
1

我发现很多人创建新文件并添加当前日期时间然后添加文件扩展名的示例,但是我想要做的是查看当前是否存在文件以及是否只是添加当前日期时间到文件名,但我无法弄清楚如何维护文件扩展名。我当前的代码至今:在重命名期间将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

看起来好像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; 
} 
+0

使用'Path.GetExtention(UploadedFile.FileName)'工作。 – Matthew

3

.NET已经内置方法安全地提取一个文件名的不同部分(该文件的名称和它分别是扩展)。在System.IO命名空间中存在Path

假设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); 
+0

该计划是让'NewFileName'传递进来,没有附加文件扩展名,因为我希望将它从UploadedFile中取出。 – Matthew

+0

你正在检查是否存在'SavePath + NewFileName',所以如果'NewFileName'不包含扩展名,但是磁盘上的实际文件有一个,那么'File.Exists'将返回false。 –

+0

我刚刚意识到这个问题,因为我正在查看您提供的代码。我希望能够从'UploadedFile'中取出扩展名,但我想我现在需要重新审视我的整个方法。 – Matthew

2

下面的方法完全解决了你的公关oblem

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

你最好把当前的文件名,不扩展首先使用System.IO.Path.GetFileNameWithoutExtension("Path")然后添加日期时间,然后反正加起来扩展。

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); 
    } 
+0

使用'Path.GetExtention(UploadedFile.FileName)'工作。 – Matthew

+0

@MatthewVerstraete:请接受Zec的回答。 –

+0

@GrantWinney:是Zec是告诉'Path.GetExtention(UploadedFile.FileName)'工作的人。谢谢你的剩余。 –