我在编码和解码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文件。
任何人都可以告诉我代码中有什么问题吗?
答案 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()
方法会更容易。