【发布时间】:2017-09-08 10:18:27
【问题描述】:
我最终尝试读取文件,将其存储在 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 是第一个证明该问题的程序。
【问题讨论】:
-
Excel 文件不是文本文件,因此无法读取。
-
你想做什么? Excel 文件是二进制文件(实际上是压缩的 XML)。你为什么要把它当作text?
-
顺便说一句,文本文件的代码也是错误的。您正在更改文件而没有意识到。
ReadAllText将 ASCII 文本转换为 Unicode。WriteAllText写出 UTF8。如果要读取和写入完全相同的字节,请使用。ReadAllBytes -
我的错,以为所有字节都是“文本”并且可以用字符串表示。然后需要重新阅读文本的定义。我知道一个字符串不完全是一个字节数组,但几乎不一样?
-
另外,程序是否必须知道文件是否为 unicode?还是会使用 Read/write AllBytes 处理任何类型的文件?