簡體   English   中英

C#中的Base64編碼和解碼問題

[英]Problem in Base64 encoding and decoding in C#

我在編碼或解碼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文件,提示文件已損壞。

誰能告訴我代碼中有什么問題嗎?

您不是在讀取數據,而是在創建適當長度的字節數組,然后將該零數組轉換為基數64。

使用File.ReadAllBytes以一種非常簡單的方式將文件完全讀取到內存中……或者,如果您真的想手工處理,則循環將數據讀入緩沖區-您不應該依賴於對Stream.Read的單個調用Stream.Read閱讀一切。

如果要寫入二進制數據,請使用File.WriteAllBytes ,而要寫入文本,請使用File.WriteAllText

即使您設法寫出base64數據,也無法像Word中那樣打開它-因為它只是base64文本的文本文件...您要么想寫出解碼后的二進制數據, 或者您想將base64數據寫出,然后再進行解碼。 (當前,您只是丟棄解碼后的數據。)

最后,不是在您確實使用StreamWriter ,您應該使用using語句來確保它被處置,即使它拋出異常。

您不是在讀取數據,而是在寫入Base64數據,而不是已解碼的二進制數據。

如果您打算實際復制內容,則使用System.IO.File.Copy()方法會容易System.IO.File.Copy()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM