使用 EPPLUS 在打开和保存之间保持文件锁定

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

只是寻找一些关于打开现有 Excel 文件的最佳方法的建议,对数据进行一些处理,然后再次保存它,同时防止其他人在我的加载和保存之间对 Excel 文件进行编辑。

我认为我最好使用

FileStream
方法。

如果我关闭流,他们会立即调用

File.WriteAllBytes
文件已保存。但是,如果我尝试获取字节数组,然后在关闭流之前写入流,则文件不会保存。我知道
GetAsByteArray()
会关闭包裹,但为什么这会阻止我写
FileStream

using (var package = new ExcelPackage())
{
    using (var stream = new FileStream(_fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
    {
        package.Load(stream);

        //DO MY LOGIC STUFF

        //byte[] data = package.GetAsByteArray();
        //stream.Write(data, 0, data.Length);

        stream.Close();
        File.WriteAllBytes(_fileName, package.GetAsByteArray());
    }
}
c# epplus
1个回答
0
投票

但是,如果我尝试获取字节数组,然后在关闭流之前写入流,则文件不会保存。我知道

GetAsByteArray()
会关闭包,但是为什么这会阻止我编写 FileStream?

这与

GetAsByteArray()
函数无关,这是因为流仍然保持文件打开,防止另一个函数打开它的新句柄并写入它。

您需要重用已有的流。

using (var package = new ExcelPackage())
using (var stream = new FileStream(_fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
    package.Load(stream);

    //DO MY LOGIC STUFF

    byte[] data = package.GetAsByteArray();

    stream.Position = 0;  // seek back to the beginning
    stream.SetLength(data.Length);
    stream.Write(data, 0, data.Length);
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.