在我的應用程序中,有一個選項用於創建一個包含某些數據的簡單txt文件。我想按順序命名文件,如ST1,ST2 ....這個順序對所有用戶都是一樣的。如果user1創建文件系統應命名文件ST100,然後如果user2創建文件,則系統應命名文件ST101。遞增計數器
我不能使用應用程序範圍,因爲它只是準備就緒,不能在運行時更改,因爲用戶範圍只會影響單個用戶而不是整個應用程序。
我想知道是否有任何其他解決方案來實現這一點,除了使用數據庫表和添加順序。
感謝
在我的應用程序中,有一個選項用於創建一個包含某些數據的簡單txt文件。我想按順序命名文件,如ST1,ST2 ....這個順序對所有用戶都是一樣的。如果user1創建文件系統應命名文件ST100,然後如果user2創建文件,則系統應命名文件ST101。遞增計數器
我不能使用應用程序範圍,因爲它只是準備就緒,不能在運行時更改,因爲用戶範圍只會影響單個用戶而不是整個應用程序。
我想知道是否有任何其他解決方案來實現這一點,除了使用數據庫表和添加順序。
感謝
你可以使用一個循環,File.Exists
:
var dir = @"C:\SampleFolder";
int number = 100; // you want to start at 100
string fileName = String.Format("ST{0}.txt", number.ToString("D3"));
while(File.Exists(Path.Combine(dir, fileName)))
fileName = String.Format("ST{0}.txt", (++number).ToString("D3"));
最後,你將有一個新的文件名,你會得到正確的路徑:如果您的應用程序
string path = Path.Combine(dir, fileName);
如果2位用戶同時讀取文件,該怎麼辦? –
@GiorgiNakeuri:他可以將'File.Create'放入'try ... catch'中,處理IOException,然後再次嘗試(直到超過最大嘗試計數變量)。 –
始終處於打開狀態,您可以使用下一個條目的數值爲整個系統使用全局變量。如果不是,則可以使用文本文件作爲數據庫與當前文件的編號;這個解決方案的問題在於同步,如果兩個用戶同時進行相同的操作會給你帶來問題,所以最好使用數據庫。
我希望它能幫助你
最簡單的方法(可能是最強大的)是讀取現有的文件名,然後生成一個已經不存在的名稱。 – sdgfsdh
爲什麼你以100開頭而不是001開頭? –
可能會創建一些隊列?並根據該隊列從一個地方創建這些文件。 –