文件流
1、Invalid header signature; read System.Char[], expected System.Char[] - Your file appears not to be a valid OLE2 document
發生錯誤的代碼:
using FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);//根據path創建或者打開文件流
await file.CopyToAsync(fileStream);//異步地將上傳文件的內容復制到文件流。
//獲取文件名稱后綴
string fileExtension = file.FileName.Substring(file.FileName.LastIndexOf(".") + 1);
//二進制轉WorkBook
IWorkbook workbook = fileExtension == "xls" ? new HSSFWorkbook(fileStream) : new XSSFWorkbook(fileStream);
更改后的代碼:
using FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);//根據path創建或者打開文件流
await file.CopyToAsync(fileStream);//異步地將上傳文件的內容復制到文件流。
fileStream.Seek(0, SeekOrigin.Begin);
//獲取文件名稱后綴
string fileExtension = file.FileName.Substring(file.FileName.LastIndexOf(".") + 1);
//二進制轉WorkBook
IWorkbook workbook = fileExtension == "xls" ? new HSSFWorkbook(fileStream) : new XSSFWorkbook(fileStream);
增加fileStream.Seek(0, SeekOrigin.Begin);這行代碼后即可解決。
Seek方法是用於文件指針跳轉位置,可以讀取流的內容。
2、FileStream的示例1
示例2
先建立一個閱讀用的流,根據NPOI的類IWorkbook進行excel內容的編輯。
編輯完成后新建一個FileStream保存文件流,用來保存excel到本地。
重點:一定要先寫入FileSteam再關閉ReadSteam,否則寫入時會死循環報錯。