我最终尝试读取文件,存储在Cassandra数据库中的blob中,然后将其写回磁盘。遇到问题,并简化为以下代码来说明问题。相同的代码可以与.txt和.csv文件一起使用,但不能与Excel电子表格一起使用。我不确定它是否是编码问题,以及如何解决它。我尝试过Encoding.Unicode,但那也没有用。
static void testFileReadWrite()
{
string filenameIn = @"c:\demo\Timesheet.xls";
string filenameOut1 = @"c:\demo\Timesheet_Test1.xls";
string filenameOut2 = @"c:\demo\Timesheet_Test2.xls";
string fileContents1 = File.ReadAllText(filenameIn);
File.WriteAllText(filenameOut1, fileContents1);
string fileContents2 = File.ReadAllText(filenameIn, Encoding.Unicode);
File.WriteAllText(filenameOut2, fileContents2, Encoding.Unicode);
}
原始文件大小为536,576。 Test1为1,282,808,Test2为536,578。显然,我想要读出相同大小的文件,然后我将对其进行文件比较以验证它。我还希望程序可以使用任何文件类型,只是Excel是第一个证明该问题的程序。
答案 0 :(得分:3)
应该使用File.ReadAllBytes
和File.WriteAllBytes
来读取和写入二进制文件。希望它有所帮助!
这个StackOverflow有助于解释ReadAllBytes和ReadAllText之间的区别:Why is File.ReadAllBytes result different than when using File.ReadAllText?
答案 1 :(得分:-1)
我想办公室OfficeOpenXml'来自Microsoft的库,并根据需要阅读excel文件。
//
using OfficeOpenXml;
//
read the file using file stream
using (var stream= new StreamReader("filePath"))
{
// then use the stream to extract the excel specific data
using (var excelPackage = new ExcelPackage(stream))
{
var sheet = excelPackage.Workbook.Worksheets[1];
var cell1= sheet.Cells[1, 1].GetValue<string>();
}
}
然后你可以建立你的字符串并存储到你喜欢的任何地方。