2014-02-12 33 views
0

我特林打開一個SQLite格式3文件在C#中的字符串打開sqlite3的文件作爲字符串C#

string fileName = @"C:\Users\Test\Downloads\hello.sql"; 

      using (BinaryReader b = new BinaryReader(File.Open(fileName, FileMode.Open), 
                Encoding.GetEncoding(1252))) 
      { 
       int pos = 0; 
       int length = (int)b.BaseStream.Length; 
       while (pos < length) 
       { 
        int v = b.ReadInt32(); 
        textBox1.Text += (v); 

        pos += sizeof(int); 
       } 
      } 

這是迄今爲止我已經拿到了代碼,但是當我嘗試打開它,它凍結並且不會讓你做任何事情,就好像它在試圖打開它的一個常量循環上一樣。

如果您仍然對我正在嘗試做的事感到困惑。如果你在哪裏右擊文件並用記事本或記事本++打開它,你可以看到文件內容(字符串),這就是我想要在程序的字符串或文本框中顯示的內容。

PS我不是想在一個SQLite格式打開它,我想打開它作爲文本

+0

目前尚不清楚該sql文件是什麼。它包含一些明文形式的SQL語句,如「SELECT/INSERT」,或者它是SQLite存儲其數據的二進制文件?我的意思是,當你用記事本打開它時,你會看到垃圾字符,或者它是一個純文本文件 – Steve

+0

它大部分是垃圾字符,但我想要的位是純文本,我可以看到,當我打開它時記事本。 – jLynx

+0

你調試過嗎?提供沒有真實數據文件的解決方案真的很難 – Mark

回答

0

我不知道爲什麼你想這樣做,但這種方法是有效的:

string fileName = @"C:\Users\Test\Downloads\hello.sql"; 
textBox1.Text = File.ReadAllText(filename, Encoding.GetEncoding(1252)); 

,或者如果你想看到的文件內容的字節值,你可以使用:

byte[] buffer = File.ReadAllBytes(filename); 
textBox1.Text = BitConverter.ToString(buffer); 

編輯:

此代碼適用於winforms文本框。我不用檢查0x00,而是使用.NET的char.IsControl函數檢查所有控制字符並替換它們。

string fileName = @"C:\Users\Test\Downloads\hello.sql"; 

byte[] buffer = File.ReadAllBytes(fileName); 
Encoding enc = Encoding.GetEncoding(1252); 
char[] chars = enc.GetChars(buffer); 

for (int n = 0; n < chars.Length; n++) 
{ 
    if (char.IsControl(chars[n])) chars[n] = '.'; 
} 

textBox1.Text = new string(chars); 
+0

textBox1.Text = File.ReadAllText(filename,Encoding.GetEncoding(1252));輸出「SQLite格式3」 和 byte [] buffer = File.ReadAllBytes(filename); textBox1.Text = BitConverter.ToString(buffer); 什麼都不輸出。 – jLynx

+0

對不起,我現在沒有時間在自己的機器上測試它,但File.ReadAllBytes與Encoding.GetEncoding(1252).GetString結合在一起呢?如果這不起作用,請在調用GetString之前嘗試用32(空格)替換所有0字節。你的檔案有多大? – EventHorizon

+0

該文件是1.02MB,我現在只是嘗試你的其他想法 – jLynx