我有一个我要备份的文件,我没有任何“触摸”我“知道”的文件。但我收到了消息:
"The process cannot access the file 'C:\Cadence\SPB_Data\pcbenv\allegro.ilinit' because it is being used by another process
源代码:
string fileName = @"C:\Cadence\SPB_Data\pcbenv\allegro.ilinit";
string sourcePath = @"C:\Cadence\SPB_Data\pcbenv";
string targetPath = @"C:\Cadence\SPB_Data\pcbenv\backup";
// Use Path class to manipulate file and directory paths.
string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
string destFile = System.IO.Path.Combine(targetPath, fileName);
// To copy a folder's contents to a new location:
// Create a new target folder, if necessary.
if (!System.IO.Directory.Exists(targetPath))
{
System.IO.Directory.CreateDirectory(targetPath);
}
// To copy a file to another location and
// overwrite the destination file if it already exists.
System.IO.File.Copy(sourceFile, destFile, true);
所以只要程序点击这一行“System.IO.File.Copy(sourceFile,destFile,true);”我收到了错误。有什么方法可以“强制”复制吗?
答案 0 :(得分:1)
在尝试复制之前,您是否在应用程序中创建此文件/写入此文件?如果您确实创建/写入了它,那么您可能忘记在此之后关闭它。
答案 1 :(得分:1)
问题是您的复制操作的源和目标是相同的。您错误地使用了Path.Combine
。来自documentation:
如果path2包含root,则返回path2。
由于path2
(第二个参数)中有一个根,sourceFile
和destFile
都是fileName
的值。
您可能希望声明string fileName = "allegro.ilinit"
而不是您拥有的内容。
显然,异常消息有点误导。
答案 2 :(得分:0)
如果其他进程已将文件标记为“已锁定读取”,那么您将无法复制该文件。
最好的办法是找出使用Process Explorer锁定文件的进程。