C#中Base64编码和解码的问题

时间:2010-09-29 06:06:29

标签: c# base64

我在编码和解码pdf或docx文件时遇到问题。请在下面找到代码。

string FileName = @"C:\Tips.docx";   
FileStream inFile = new FileStream(FileName, FileMode.Open, FileAccess.Read);
binarydata = new byte[inFile.Length];   
string Base64String = System.Convert.ToBase64String(binarydata,0,binarydata.Length);
byte[] decoded = System.Convert.FromBase64String(Base64String);
StreamWriter writer = new StreamWriter(@"C:\Tips1.docx", false, System.Text.Encoding.ASCII);
writer.Write(Base64String);
writer.Close();

我无法打开提示文件已损坏的Tips1.docx文件。

任何人都可以告诉我代码中有什么问题吗?

3 个答案:

答案 0 :(得分:4)

你不是读取数据 - 你只是创建一个适当长度的字节数组,然后将该零数组转换为base 64。

使用File.ReadAllBytes以一种非常简单的方式将文件完全读入内存...或者如果真的希望手动执行,则循环将数据读入缓冲区 - 你不应该只依赖一次Stream.Read来阅读所有内容。

如果您要编写二进制数据,请使用File.WriteAllBytes,并撰写文字,请使用File.WriteAllText

即使你设法写出base64数据,你也无法像在Word中那样打开它 - 因为它只是一个base64文本的文本文件......你要么想要写出解码后的二进制数据,,你想将base64数据写出来,然后再将其解码。 (目前你只是扔掉了解码数据。)

最后,不是在你的时候使用StreamWriter,你应该使用using语句来确保它被处置掉,即使它抛出异常。< / p>

答案 1 :(得分:0)

您没有读取数据,而且您还在编写Base64数据,而不是已解码的二进制数据。

答案 2 :(得分:0)

如果您打算实际复制内容,使用System.IO.File.Copy()方法会更容易。