2012-02-24 51 views
0

我傳遞一個參數給我的方法,其中數據類型是字符串,但是這個字符串是一個二進制類型「UEsDBBQABgAIAAAAIQDfz5sukgEAAJQGAAATANwBW0NvbnRlbnRfVHlwZ」,例如,然後這個參數將被寫入一個excel格式。問題是,該文件可以創建,但由於格式無效而損壞。輸入參數來自excel文件,但讀取爲二進制。C#寫爲Excel

我的示例代碼:

public void writeFile(String fileContent) 
{  
    // Write the string to a file. 
    StreamWriter file = new StreamWriter("c:\\test2.xlsx"); 
    BinaryWriter bw = new BinaryWriter(file); 

    bw.Write(fileContent); 

    bw.Close(); 
    file.Close(); 
} 

感謝。

+2

因此,您以*字符串的形式讀取* .xlsx文件,並嘗試將其寫回(不更改字符串)爲* .xlsx-File? – ChrFin 2012-02-24 09:02:48

+0

是的,因爲我這樣做的原因是因爲我想將文件從Web服務客戶端傳輸到Web服務主機。因此,在客戶端,它讀取excel的二進制內容,然後在Web服務主機端讀取二進制內容並將其寫入excel。我不允許使用FTP,因此我使用的是Web服務實現。 – ChiSen 2012-02-24 09:13:34

回答

4

二進制數據不能作爲文本/字符串原樣發送或使用,原因是存在不能用文本字符表示它們的二進制數字 - 同時一些二進制數字具有不同的含義在一個字符串中。

你可以做的是使用

  • MIME(使用Base64)
  • 的UUEncode
  • XXEncode

,然後之一將其轉換爲二進制

將其轉換爲字符串

該asp.net已準備好Convert.ToBase64StringConvert.FromBase64String使轉換。

從asp.net轉換功能:
http://msdn.microsoft.com/en-us/library/dhx0d524.aspx
http://msdn.microsoft.com/en-us/library/system.convert.frombase64string.aspx

定製轉換示例
http://www.csharp411.com/convert-binary-to-base64-string/

+1

嗨,感謝您的幫助,我確實設法通過使用Convert.FromBase64String(fileContent)來解決問題,然後使用File.WriteAllBytes。 – ChiSen 2012-02-25 17:15:09

0

如果字節被作爲字符串使用代碼如下來:

var base64EncodedBytes = System.Convert.FromBase64String(bytesAsString); 
           File.WriteAllBytes(fullPath, base64EncodedBytes); 

希望這有助於。