C#Excel互操作错误:该文件正被另一个进程使用



在我的项目中,mt的目的是编辑和移动文件。为了简单起见,我删除了所有的编辑部分,因为它们似乎不会导致错误。我已经用这段代码测试了这个错误,它仍然会发生。

这是我的代码:

Application xlApp = new Application();
Workbooks xlWorkbooks = xlApp.Workbooks;
Workbook xlWorkbook = xlWorkbooks.Open(Path.GetFullPath(fileNameWithPath));
Sheets xlWorksheets = xlWorkbook.Sheets;
Worksheet xlWorksheet = xlWorksheets.get_Item(1);
Range xlRange = xlWorksheet.UsedRange;
string fileNameWithExtension = GetFileNameWithExtension(fileNameWithPath);
xlWorkbook.Close(false);
xlApp.Quit();
Marshal.FinalReleaseComObject(xlRange);
Marshal.ReleaseComObject(xlWorksheet);
Marshal.ReleaseComObject(xlWorksheets);
Marshal.ReleaseComObject(xlWorkbook);
Marshal.ReleaseComObject(xlWorkbooks);
Marshal.FinalReleaseComObject(xlApp);
xlRange = null;
xlWorksheet = null;
xlWorksheets = null;
xlWorkbook = null;
xlWorkbooks = null;
xlApp = null;
GC.GetTotalMemory(false);
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.GetTotalMemory(true);
File.Move(fileNameWithPath, myNewPath);

运行此程序时,当应用程序尝试移动文件时,我收到一条错误消息:The process cannot access the file because it is being used by another process.

我确信我已经关闭了所有的COM对象,并完成了我在网上可以找到的所有建议,以使其发挥作用。关于我错过了什么有什么想法吗?

使用sysinterals检查是哪个进程导致了此问题。一般来说,如果你有文件的写入权限,我会在做这些事情之前进行验证。

验证写入访问的方法:

public static bool FileHasWriteAccess(string Path)
{
    try
    {
        System.IO.File.Open(Path, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite).Dispose();
        return true;
    }
    catch (System.IO.IOException)
    {
        return false;
    }
}

看看:找出哪个进程正在锁定Windows中的文件或文件夹。

相关内容

最新更新