2013-04-25 70 views
1

因此,我正在編寫一些正在經歷.xlsx文件目錄並選取最後創建的文件的代碼。這是一個簡單的任務,但是某個特定對象的特性會發生一些奇怪的事情,並且可能會出現更多這種情況。

這裏是我的代碼:

 DirectoryInfo di = new DirectoryInfo(FolderPath); 
     FileInfo[] FileArray = di.GetFiles("*.xlsx", SearchOption.AllDirectories); 
     if (FileArray.Count() != 0) 
     { 
      DateTime latestDate = DateTime.MinValue; 
      string FileName = String.Empty; 
      foreach (FileInfo File in FileArray) 
      { 
       if (File.CreationTime > latestDate) 
       { 
        latestDate = File.CreationTime; 
        FileName = File.FullName; 
       } 
      } 
     } 

,因爲我用它來查詢信息,最新的文件,並顯示它的FileName是很重要的。但是,特定.xlsx文件(可能更多)的Name屬性顯示爲如此~$File.xlsx,實際上文件名實際上是File.xlsx。這導致FullName屬性也包含這些字符。

有什麼辦法解決這個問題嗎?是什麼觸發了這個?

+2

像excel和work這樣的Microsoft office工具會以〜$開頭創建臨時文件。我認爲這些文件存在於您的文件夾中,File類僅顯示該信息。 – svrcoder 2013-04-25 14:16:12

回答

4

打開一個xlsx文件會導致Excel創建一個隱藏文件,其名稱前面帶有「〜$」。因此,如果其中一個Excel文件在您檢索目錄內容時打開,您還將獲得臨時文件。

添加一個排除隱藏文件的過濾器,並解決您的問題。

例子:

FileAttributes attributes = File.GetAttributes(path); 

if((attributes & FileAttributes.Hidden) == FileAttributes.Hidden) 
{ 
    // Hidden file, just skip it 
} 

http://msdn.microsoft.com/en-us/library/system.io.file.getattributes.aspx

+0

會像'File.Name.Contains(「〜$」)'有效嗎? – 2013-04-25 14:24:53

+1

@DerekW:我會使用我提供的示例,這樣可以確保沒有隱藏的文件被提供,這可能有助於避免其他問題。 – CodeZombie 2013-04-25 14:29:42

1

~$表示該文件是由Microsoft Office使用的臨時文件。有關更多信息,請參閱here

相關問題