2011-10-18 451 views
1

對於用於測試一些複製場景的測試套件,我編寫了一個FileAccesser。這應該訪問給定目錄中的隨機文件(在隨機子目錄中)以及刪除,創建,重命名和更改文件或/和內容。我正在尋找一種方法來訪問隨機子目錄中的隨機文件。有什麼建議麼?訪問C中隨機目錄中的隨機文件#

我的解決方案,使所有子目錄中的所有文件的列表:

var _Directory = new DirectoryInfo(args[1]); 
var _Files = _Directory.GetFiles("*", SearchOption.AllDirectories); 

現在我可以訪問一個隨機文件與

Random _Random = new Random(); 
var _RandomFile = _Files.ElementAt(_Random.Next(_Files.Count())); 

THX對您有所幫助。

+2

如何使用'Directory.GetFiles'列出所有文件,然後選擇一個隨機的文件? – CodesInChaos

+0

Directory.GetFiles返回給定目錄中的文件列表。我需要一個遞歸的GetFiles函數 – kockiren

+3

然後你可以自己實現遞歸或者使用'SearchOption.AllDirectories'作爲第三個參數。 – CodesInChaos

回答

2

你可以這樣做:

  • 創建所有的目錄列表(如字符串列表)
  • 對於每個目錄在其中創建文件的列表。
  • 使用隨機生成器生成一個介於0和dir count列表之間的數字。
  • 根據上面生成的數字作爲索引,從列表中選擇目錄。
  • 應用最後2步爲上述選定的目錄選擇一個隨機文件。
+0

Thx爲你的答案,目錄就像一棵樹,有很多子目錄和大約10個關卡。我可以序列化所有子目錄中的文件嗎? – kockiren

+0

是的,你可以使用遞歸函數遍歷整個樹。 – Ankur

+0

如果我這樣做,我會生成一個完整路徑的平面列表 –

4

我想我明白你想要做什麼,但使用隨機性進行測試似乎是在這裏做錯了事情。

我希望我沒有教任何人在這裏吸雞蛋,但測試應該是可重複和可測量的。如果任何測試失敗,您需要能夠逐步查明錯誤並糾正錯誤。

如果您可以在一個目錄中修改文件的屬性和內容,那麼只要測試的所有參數都相同,您應該可以在任何目錄中執行此操作。如果測試參數發生變化,則測試範圍增加(例如,對目錄或文件的權限使其成爲只讀)。

+1

+1爲可重複和可測量。所以該死的權利... –

+0

Thx爲您的答案,你是對的。對於我使用單獨步驟構建方案的複製測試。但是現在我想測試複製時間並且在生產系統中,一些用戶訪問隨機文件並自己更改內容或文件。我現在想要做的是同步兩臺服務器(使用NTP)並啓動主服務器上的randomaccesser(這會記錄我一個CSV:時間戳;服務器名;文件;方法;文件大小),複製監視器是一個文件觀察器也CSV時間戳;服務器名稱;文件;方法,文件大小,比我可以檢查時間戳,看看會發生什麼 – kockiren

1
  • 創建一個字符串列表,每個字符串代表一個文件路徑(目錄\ FILENAME.EXT)
  • 生成隨機數0 - 字符串-1
  • 的長度獲取基於隨機numnber指數
+0

thx爲您的幫助,我的編輯解決方案工作正常 – kockiren