目前,我正在编写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);
}发布于 2012-07-27 08:49:58
您能解释一下目录中的文件是以什么名称出现的吗?
一起工作
附言:当然,如果你觉得我没有抓住这个问题,你能提供一些更准确的信息吗?
发布于 2012-07-27 07:19:06
如果不查看您的代码,很难看出发生了什么,但我将推测这三个单独的服务器获得一个目录列表,从该列表中选择一个要处理的文件,同时另一台服务器已重命名该文件,因为另一台服务器决定开始处理该文件。
如果这种情况很少发生,你可以忽略这个异常(假设我的解释是正确的)。如果这种情况经常发生,你需要更详细地解释你正在做什么。
您可以通过让每个服务器以不同的方式对文件列表排序(例如,一个A-Z,第二个Z-A,第三个L-Z,A-J,...)来最小化对同一文件的争用。然后在排序顺序中选择最上面的一个来处理。
发布于 2012-07-29 07:44:39
正如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);
}https://stackoverflow.com/questions/11679365
复制相似问题