我要疯狂地试图理解为什么我不能写一个新文件。我发现了一些示例,这些示例说要像这样写文件:
public void WriteFile(string filename, IEnumerable<string> paragraphs)
{
var docStream = new POIFSFileSystem(File.OpenRead("empty.doc"));
var doc = new HWPFDocument(docStream);
var range = doc.GetRange();
foreach (var para in paragraphs)
{
range.InsertAfter(para);
}
DocumentSummaryInformation dsi = doc.DocumentSummaryInformation;
var cp = dsi.CustomProperties;
if (cp == null)
cp = new NPOI.HPSF.CustomProperties();
cp.Put("myProperty", "foo bar baz");
doc.Write(File.OpenWrite(filename));
}
执行该方法后,我想从文件中读取所有字节,然后将内容返回给调用所有这些内容的浏览器(来自ASP.NET CORE):
byte[] fileBytes = System.IO.File.ReadAllBytes(path);
var result = File(fileBytes, "application/msword", path);
//System.IO.File.Delete(path);
var retObj = Newtonsoft.Json.JsonConvert.SerializeObject(new {filePath = path});
return Task.FromResult(retObj);
ReadAllBytes行以及尝试在调试时从Windows资源管理器打开文件的操作给出了有关该文件正在被另一个进程使用的错误。如果我停止网站执行,然后再次尝试浏览器,则会被告知文件已损坏!这里没有NPOI类是可抛弃的,并且POI中的POIFSFileSystem.Close方法未在NPOI中实现,因此我不得不假定它是隐式关闭的。
有人知道如何干净地关闭并释放文件吗? 还是有人可以推荐一个不那么神秘的“好”库来用于处理和创建MS Office文档?