2013-12-20 40 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)'工作的人。謝謝你的剩餘。 –