2010-09-22 86 views
1

有沒有辦法在目錄中的最大文件數量上拋出新的異常?文件最大數量上的錯誤

+4

您的問題非常模糊。請更具體一些,並閱讀http://tinyurl.com/so-hints。 – 2010-09-22 05:27:14

+0

當你達到目錄中的最大文件數目時,你想要做什麼?寫新文件? – chakrit 2010-09-22 05:27:56

+0

我想會有一個例外或系統創建下一個文件時出錯。你的意思是軟件定義的限制嗎?你想對這個異常做什麼?在其他地方寫文件?然後只是預先構建您的目錄以避免這種情況(使用日期或目錄名稱中的某個計數器)... – pascal 2010-09-22 07:59:07

回答

1

沒有,也沒有了:

你可以用一個更通用的

System.IO.IOException 

捕捉到它並讀取(基本)消息你可以從這一點上拋出一個自寫的例外。

UPDATE I just learned。您使用的是

bool isfull = info.GetFiles().LongLength == 4.294.967.295 

財產。不幸的是,它會吃掉你所有的記憶。

因此,使用

DirectoryInfo.EnumerateFiles().Count() 

也許在分塊的方式可能是一個更好的辦法

FYI:

  • 65,534爲FAT32
  • 4,294,967,295對於NTFS

source

+0

我的猜測是你的應用程序在將'true'賦值給'isFull'變量之前將耗盡RAM。只是持有對這些數組中40億條目的引用將消耗4GB,這是排除實際的字符串... – 2010-09-22 12:41:47

+0

大聲笑,我補充說明。 – 2010-09-22 12:49:54

1

我不知道C#的具體內容,但我知道Java沒有特定的異常或錯誤來拋出一個完整的驅動器。我建議簡單地製作你自己的異常類並使用它。我建議將它稱爲FullDirectoryErrorDirectoryOverflowError,假設它足夠嚴重以致稱爲錯誤。

0

像這樣的東西?

public static void checkFileNumber(string directoryToCheck, int maxNumber) 
{ 
    if (Directory.Exists(directoryToCheck)) 
    { 
     if (Directory.GetFiles(directoryToCheck).Length > maxNumber) 
     { 
      throw new Exception("Too many files in " + directoryToCheck); 
     } 
    } 
} 

一定要use System.IO; :-)

+0

什麼是目錄的最大數目? – Ata 2010-09-22 06:23:56

+0

當我在directoryToCheck中有超過maxNumber的文件(真實文件而不是目錄)時,我發佈的代碼會拋出一個異常。 – 2010-09-22 06:32:34

+0

現在我明白了:限制取決於文件系統類型。一個快速的報告顯示了這些限制:FAT16 512條目,FAT32 65,534條目,NTFS 4,294,967,295條目 – 2010-09-22 06:34:11

0

投擲異常是一個昂貴的操作;當你可以避免它時,請這樣做。如果可能的話,嘗試防守編程。但是當拋出一個,你必須提供一個特定的例外匹配。

就像Casper Kleijne說的那樣,你可以捕捉到IOException,但是爲什麼首先你會想要捕捉呢?漁獲物的補償行爲是什麼?

請提供一些更多的信息,你想用它來實現。