2016-04-11 3 views
1

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

Вот мой код, который у меня есть на данный момент.

#include <iostream> 
#include <fstream> 
#include <string> 
#include <sstream> 

using namespace std; 

int main(){ 

    string str; 
    std::ifstream in("c:/Users/Petrus/Documents/History"); // I have copy my file into my documents to make sure I'm not interfering with Chrome. 
    std::stringstream buffer; 

    if (!in.is_open()){ 
     cout << "Failed to open" << endl; 
    } 
    else{ 
     cout << "Opened OK" << endl; 
    } 

    buffer << in.rdbuf(); 

    std::string contents(buffer.str()); 

    while (getline(buffer, str)) 
    { 
     cout << str; 
    } 
    in.close(); 

    system("PAUSE"); 

    return 0; 
} 

Если вы хотите взглянуть на историю хромированной файл, его расположенный по адресу:

C: \ Users \ ВАШЕ ИМЯ \ AppData \ Local \ Google \ Chrome \ User Data \ Default -> История

(PS Вы должны включить скрытые файлы, чтобы иметь возможность видеть AppData.)

заранее спасибо

+0

Я не знаю, как это работает в Windows, но в моей системе Linux база данных истории - это только * база данных *, точнее база данных [SQLite] (https://www.sqlite.org/) , Поэтому, если вы хотите выполнить некоторую обработку или извлечь из нее информацию, вы должны, вероятно, использовать нужные инструменты (например, [SQLite] (https://www.sqlite.org/)), чтобы открыть и прочитать ее. –

ответ

1

std::getline() следует использовать только для чтения простого текста файлы.

Для чтения произвольных двоичных файлов вы должны использовать read(). Кроме того, в вашей операционной системе вы должны открыть двоичные файлы, используя флаг std::ios::binary.

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