2012-12-26 200 views
2

因此,我使用ReadFilekernel32讀取文件。這是我的代碼在SetFilePointerReadFile的幫助下閱讀文件。將字節數組(從讀取文件)轉換爲字符串

public long ReadFileMe(IntPtr filehandle, int startpos, int length, byte[] outdata) 
{ 
    IntPtr filea = IntPtr.Zero; 
    long ntruelen = GetFileSize(filehandle, filea); 
    int nRequestStart; 
    uint nRequestLen; 
    uint nApproxLength; 
    int a = 0; 
    if (ntruelen <= -1) 
    { 
     return -1; 
    } 
    else if (ntruelen == 0) 
    { 
     return -2; 
    } 

    if (startpos > ntruelen) 
    { 
     return -3; 
    } 
    else if (length <= 0) 
    { 
     return -5; 
    } 
    else if (length > ntruelen) 
    { 
     return -6; 
    } 
    else 
    { 
     nRequestStart = startpos; 
     nRequestLen = (uint)length; 

     outdata = new byte[nRequestLen - 1]; 

     SetFilePointer(filehandle, (nRequestStart - 1), ref a, 0); 
     ReadFile(filehandle, outdata, nRequestLen, out nApproxLength, IntPtr.Zero); 
     return nApproxLength; //just for telling how many bytes are read in this function 
    } 
} 

當我使用這個函數時,它可以工作(用於其他目的),所以這段代碼被測試和工作。

但是主要的問題是,我現在需要將函數放入字節的參數outdata轉換成string

我嘗試使用Encoding.Unicode等(所有的UTF),但它不起作用。

+0

你試過這個:string result = System.Text.Encoding.Default.GetString(outdata);並查看您是否能夠將輸出轉換爲字符串。 – Saravanan

+0

我也曾嘗試過。它沒有給出任何結果。 – newbie

+0

沒有返回參數或參考參數,函數將不會放任何東西... – knaki02

回答

1

嗯...... Encoding.Name_of_encoding.GetString必須努力... 嘗試水木清華這樣的:

var convertedBuffer = Encoding.Convert(
      Encoding.GetEncoding(/*name of encoding*/),Encoding.UTF8, outdata); 
var str = Encoding.UTF8.GetString(convertedBuffer); 

UPDATE: 什麼這個?:

using (var streamReader = new StreamReader(@"C:\test.txt", true)) 
     { 
      var currentEncoding = streamReader.CurrentEncoding.EncodingName; 
      Console.WriteLine(currentEncoding); 
     } 
+0

是的。但編碼的名稱是我正在尋找的>< – newbie

+0

它說它是在Unicode(UTF-8)上。但我曾嘗試unicode和utf-8 – newbie

相關問題