2014-02-12 2 views
0

Я Тринга открыть SQLite 3 Формат файла в виде строки в C#Открыть SQLite3 файл в виде строки с #

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); 
       } 
      } 

Это код, который я получил до сих пор, но когда я пытаюсь открыть его, она замерзает и не позволят вам делать что-либо, как будто его на постоянной петле пытается открыть его.

Если вы все еще смущены тем, что я пытаюсь сделать. Если вы щелкнете правой кнопкой мыши по файлу и откройте его с помощью блокнота или блокнота ++, вы увидите содержимое файла (String), и это то, что я хочу отобразить в строке или текстовом поле в программе.

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); 

Edit:

Этот код работает с текстовыми полями winforms. Вместо проверки на 0x00 я проверяю все управляющие символы с помощью функции char.IsControl .NET и заменяю их.

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 (имя файла, Encoding.GetEncoding (1252)); выходы «SQLite format 3» и byte [] buffer = File.ReadAllBytes (имя файла); textBox1.Text = BitConverter.ToString (buffer); ничего не выводит, поскольку он frezes. – jLynx

+0

Извините, у меня нет времени проверить это на моей собственной машине сейчас, но как насчет File.ReadAllBytes в сочетании с Encoding.GetEncoding (1252) .GetString? Если это не сработает, попробуйте заменить все 0 байтов на 32 (пробел) перед вызовом GetString. Насколько велик ваш файл? – EventHorizon

+0

файл 1.02MB, и теперь я просто попробую вашу другую идею. – jLynx

Смежные вопросы