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

Pra*_*eep 1 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();
Run Code Online (Sandbox Code Playgroud)

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

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

Jon*_*eet 5

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

用于File.ReadAllBytes以非常简单的方式将文件完全读入内存......或者如果你真的想手动完成,循环将数据读入缓冲区 - 你不应该依赖单个调用Stream.Read来读取所有内容。

如果要写入二进制数据,请使用File.WriteAllBytes,而要写入文本,请使用File.WriteAllText

即使您已经设法写出 base64 数据,您也无法像在 Word 中那样打开它——因为它只是一个 base64 文本的文本文件……您要么想写出解码后的二进制数据,或者您想将 base64 数据写入某些内容,然后稍后对其进行解码。(目前你只是扔掉解码的数据。)

最后,不是在您确实使用 a 的时候StreamWriter,您应该使用一个using语句来确保它被释放,即使它抛出异常。