已解决:网络驱动器上的 c# closexml excel saveas 会引发错误该进程无法访问文件“...”,因为它正在被另一个进程使用

问题描述 投票:0回答:1

我们编写了一个工具来打开一个 excel 文件,用数据库中的数据填充它,并用 c# 中的 closexml.excel 用另一个名称保存它。
有时它会抛出此错误:

该进程无法访问文件“”,因为它正在被另一个进程使用。
我想知道这可能是哪个过程,因为这个文件是全新的。

所以我写了一个小脚本来测试这个。

  1. 奔跑
  • 打开文件并将其保存在本地驱动器上 100 次
    这是代码:
        var path = @"c:\tmp\CCI_Reporting";
        for (var i = 1; i < 100; i++)
            try
            {
                var workBook = new XLWorkbook($@"{path}\0.xlsx");
                workBook.SaveAs($@"{path}\{i}.xlsx");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

  • 结果:没有错误
  1. 奔跑
  • 打开文件并在网络驱动器上保存 100 次
    相同的代码,另一个路径 -> e:\CCI_Reporting(网络驱动器到本地文件夹)
  • 结果:
    该进程无法访问文件“E:\CCI_Reporting .xlsx”,因为它正在被另一个进程使用。
    该进程无法访问文件“E:\CCI_Reporting .xlsx”,因为它正在被另一个进程使用。
    该进程无法访问文件“E:\CCI_Reporting .xlsx”,因为它正在被另一个进程使用。
    该进程无法访问文件“E:\CCI_Reporting .xlsx”,因为它正在被另一个进程使用。
    该进程无法访问文件“E:\CCI_Reporting 8.xlsx”,因为它正在被另一个进程使用。
    该进程无法访问文件“E:\CCI_Reporting 9.xlsx”,因为它正在被另一个进程使用。
    该进程无法访问文件“E:\CCI_Reporting).xlsx”,因为它正在被另一个进程使用。
    该进程无法访问文件“E:\CCI_Reporting+.xlsx”,因为它正在被另一个进程使用。
    该进程无法访问文件“E:\CCI_Reporting 8.xlsx”,因为它正在被另一个进程使用。
    该进程无法访问文件“E:\CCI_Reporting 9.xlsx”,因为它正在被另一个进程使用。
    该进程无法访问文件“E:\CCI_Reporting3.xlsx”,因为它正在被另一个进程使用。
    该进程无法访问文件“E:\CCI_Reporting:.xlsx”,因为它正在被另一个进程使用。
    该进程无法访问文件“E:\CCI_Reporting\87.xlsx”,因为它正在被另一个进程使用。
  1. 奔跑
  • 打开文件,等待10秒并将其保存到网络驱动器
    在保存之前添加此行
    Thread.Sleep(10000);
  • 结果:
    该进程无法访问文件“E:\CCI_Reporting .xlsx”,因为它正在被另一个进程使用。
    该进程无法访问文件“E:\CCI_Reporting 8.xlsx”,因为它正在被另一个进程使用。
    该进程无法访问文件“E:\CCI_Reporting 8.xlsx”,因为它正在被另一个进程使用。
    该进程无法访问文件“E:\CCI_Reporting:.xlsx”,因为它正在被另一个进程使用。
    该进程无法访问文件“E:\CCI_Reporting\87.xlsx”,因为它正在被另一个进程使用。
  1. 奔跑
  • 与 1. 运行相同
  • 结果:没有错误。

肯定没有其他过程。
在网络驱动器上保存时出现什么问题?
可能的解决方法是什么?
谢谢你的帮助。

c# excel closedxml
1个回答
0
投票

为什么这个人不写出我的问题有什么问题?不幸的是,-1 对我没有帮助。

但幸运的是我找到了可以帮助我的人。这是解决方案:

    var path = @"e:\CCI_Reporting";
    for (var i = 1; i <= 100000; i++)
        try
        {
            using var x = File.Open($@"{path}\0.xlsx", FileMode.Open);
            using var y = File.Create($@"{path}\{i}.xlsx");
            var workBook = new XLWorkbook(x);
            workBook.SaveAs(y);
            Console.WriteLine($"workbook {i} saved.");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
© www.soinside.com 2019 - 2024. All rights reserved.