使用错误文件错误
Faulty file in use error
这段代码是我的Form_Load
方法中的第一段代码:
DirectoryInfo dir =new DirectoryInfo("d:\themes.thumb");
string[] animals = new string []
{
"Snakes",
"SnowyOwls",
"Tigers",
"TropicalFish",
"WildBeauty",
"Wolves"
};
foreach (FileInfo fil in dir.GetFiles())
{
for(int ii=0;ii<animals.Length;ii++)
{
if (fil.Name.StartsWith(animals[ii]))
{
try
{
fil.Replace(fil.FullName,fil.FullName.Replace(fil.Name,"Animals-" + fil.Name));
}
catch
{
}
}
}
只要 if (fil.Name.StartsWith(animals[ii]))
为真,我就会收到以下错误:
The process cannot access the file because it is being used by another process.
我在这段代码之前没有打开任何文件,这是怎么回事?
获取 LockHunter。它是一个免费工具,可以向您显示哪个进程占用了特定文件或文件夹。我发现它真的很有用。
Microsoft Process Explorer 也是免费的,还可以按名称查找打开的句柄 (Ctrl+F)。
您应该将阅读逻辑与更新逻辑分开。
例如:
var replacements = dir.GetFiles()
.Where(file => animals.Any(animal => file.Name.StartsWith(animal)))
.Select(file => new
{
OldFullName = file.FullName,
NewFullName = file.FullName.Replace(file.Name, "Animals-" + file.Name)
})
.ToList();
foreach (var replacement in replacements)
{
File.Move(replacement.OldFullName, replacement.NewFullName);
}
您的替换逻辑有一些细微的错误(例如,位于名为 "Wolves" 的文件夹中的文件会发生什么?)您可能想解决这个问题。
看来您误解了如何使用 FileInfo.Replace
方法。
fil.Replace(fil.FullName,fil.FullName.Replace(fil.Name,"Animals-" + fil.Name));
这里你实际上是在试图用自己覆盖fil
的内容。这解释了错误消息。
您可能需要更仔细地阅读 documentation。
编辑:
绝对清楚:FileInfo.Replace
并不意味着用于执行文件 重命名 。它旨在替换文件 内容 。要执行重命名,请使用 FileInfo.MoveTo
.
这段代码是我的Form_Load
方法中的第一段代码:
DirectoryInfo dir =new DirectoryInfo("d:\themes.thumb");
string[] animals = new string []
{
"Snakes",
"SnowyOwls",
"Tigers",
"TropicalFish",
"WildBeauty",
"Wolves"
};
foreach (FileInfo fil in dir.GetFiles())
{
for(int ii=0;ii<animals.Length;ii++)
{
if (fil.Name.StartsWith(animals[ii]))
{
try
{
fil.Replace(fil.FullName,fil.FullName.Replace(fil.Name,"Animals-" + fil.Name));
}
catch
{
}
}
}
只要 if (fil.Name.StartsWith(animals[ii]))
为真,我就会收到以下错误:
The process cannot access the file because it is being used by another process.
我在这段代码之前没有打开任何文件,这是怎么回事?
获取 LockHunter。它是一个免费工具,可以向您显示哪个进程占用了特定文件或文件夹。我发现它真的很有用。 Microsoft Process Explorer 也是免费的,还可以按名称查找打开的句柄 (Ctrl+F)。
您应该将阅读逻辑与更新逻辑分开。
例如:
var replacements = dir.GetFiles()
.Where(file => animals.Any(animal => file.Name.StartsWith(animal)))
.Select(file => new
{
OldFullName = file.FullName,
NewFullName = file.FullName.Replace(file.Name, "Animals-" + file.Name)
})
.ToList();
foreach (var replacement in replacements)
{
File.Move(replacement.OldFullName, replacement.NewFullName);
}
您的替换逻辑有一些细微的错误(例如,位于名为 "Wolves" 的文件夹中的文件会发生什么?)您可能想解决这个问题。
看来您误解了如何使用 FileInfo.Replace
方法。
fil.Replace(fil.FullName,fil.FullName.Replace(fil.Name,"Animals-" + fil.Name));
这里你实际上是在试图用自己覆盖fil
的内容。这解释了错误消息。
您可能需要更仔细地阅读 documentation。
编辑:
绝对清楚:FileInfo.Replace
并不意味着用于执行文件 重命名 。它旨在替换文件 内容 。要执行重命名,请使用 FileInfo.MoveTo
.