[英]Concurrency reading writing files
目前,我正在編寫Windows服務,以處理大量的xml文件並將信息從xml文件保存到數據庫。 有3台運行相同服務的計算機指向相同的共享位置。 在此過程中,我總是會遇到“找不到文件”的異常情況,並且不知道如何解決此問題。 我試圖從目錄中獲取所有文件,然后根據計算機名稱重命名這些文件,並允許每台計算機處理自己的文件集,但仍然遭受“找不到文件”異常的困擾。 誰能告訴我解決這個問題的正確方法。
謝謝。
碼
if (Directory.Exists(folder))
{
string pattern = ".xml";
string machineName = System.Environment.MachineName;
string[] files = Directory.GetFiles(folder, pattern, SearchOption.AllDirectories);
newExt = string.Format("{0}.{1}", machineName, newExt);
for (int i = 0; i < files.Length; i++)
{
if (files[i].Contains(machineName))
{
//replace this new extension
files[i].Replace(machineName + ".", "");
}
else
{
files[i] = ChangeExtension(files[i], newExt, true);
}
}
IEnumerable<string> sortedFiles = files.Where(f => !string.IsNullOrEmpty(f) && f.Contains(machineName))
.OrderBy(f => f, Sorter);
}
不查看代碼就很難看到正在發生的事情,但是我推測這三台單獨的服務器會得到一個目錄列表,從該列表中選擇一個文件進行處理,與此同時,另一台服務器已重命名該文件,因為另一台服務器決定開始處理該文件。
如果這種情況很少發生,則可以忽略該異常(假設我的解釋正確)。 如果這種情況經常發生,您將需要更詳細地說明自己在做什么。
通過讓每個服務器以不同的方式對文件列表進行排序(例如,一個AZ,第二個ZA,第三個LZ,AJ等),然后按排序順序選擇最上面的一個,可以最大程度地減少同一文件的爭用。從事於。
您能否解釋一下目錄中出現了哪些名稱文件?
PS:當然,如果您覺得我未能解決問題,請提供一些更准確的信息。
如Eric J所述,您可以簡單地忽略以下錯誤:
if (Directory.Exists(folder))
{
string pattern = ".xml";
string machineName = System.Environment.MachineName;
string[] files = Directory.GetFiles(folder, pattern, SearchOption.AllDirectories);
newExt = string.Format("{0}.{1}", machineName, newExt);
for (int i = 0; i < files.Length; i++)
{
try
{
if (files[i].Contains(machineName))
{
//replace this new extension
files[i].Replace(machineName + ".", "");
}
else
{
files[i] = ChangeExtension(files[i], newExt, true);
}
catch(FileNotFoundException ex)
{
}
}
IEnumerable<string> sortedFiles = files.Where(f => !string.IsNullOrEmpty(f) && f.Contains(machineName))
.OrderBy(f => f, Sorter);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.