只是寻找一些关于打开现有 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());
}
}
但是,如果我尝试获取字节数组,然后在关闭流之前写入流,则文件不会保存。我知道
会关闭包,但是为什么这会阻止我编写 FileStream?
GetAsByteArray()
这与
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);
}