[英]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.