我在编码和解码 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();
Run Code Online (Sandbox Code Playgroud)
我无法打开提示文件已损坏的 Tips1.docx 文件。
任何人都可以告诉我代码中有什么问题吗?
您不是在读取数据 - 您只是创建了一个适当长度的字节数组,然后将该零数组转换为基数 64。
用于File.ReadAllBytes以非常简单的方式将文件完全读入内存......或者如果你真的想手动完成,循环将数据读入缓冲区 - 你不应该依赖单个调用Stream.Read来读取所有内容。
如果要写入二进制数据,请使用File.WriteAllBytes,而要写入文本,请使用File.WriteAllText。
即使您已经设法写出 base64 数据,您也无法像在 Word 中那样打开它——因为它只是一个 base64 文本的文本文件……您要么想写出解码后的二进制数据,或者您想将 base64 数据写入某些内容,然后稍后对其进行解码。(目前你只是扔掉解码的数据。)
最后,不是在您确实使用 a 的时候StreamWriter,您应该使用一个using语句来确保它被释放,即使它抛出异常。