将Excel文件读入内存,然后将其写回磁盘

时间:2017-04-12 14:45:29

标签: c# encoding utf

我最终尝试读取文件,存储在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是第一个证明该问题的程序。

2 个答案:

答案 0 :(得分:3)

应该使用File.ReadAllBytesFile.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>();
    }
}

然后你可以建立你的字符串并存储到你喜欢的任何地方。