Моя программа использует небольшую базу данных SQLite3.Чтобы убедиться, что он действительно существует при запуске программы, у меня есть скрипт создания базы данных в файле, который выполняется.
Скрипт работает без проблем.
Однако при использовании C ++ IФункции / O для чтения из этого файла. Я получаю очень часто недопустимые символы в конце моего файла, в результате чего скрипт содержит ошибки и не выполняется должным образом библиотекой SQLite.Вот пример при отображении содержимого буфера:
// Proper content from the file, then a random character is there
1
Error executing request: near "1": syntax error
Также появляются другие символы, пробелы, цифры, буквы ... Вот код, в который я загружаю свой скрипт:
std::cerr << "Creating database if needed...\n";
char sql_script[] = "/path/to/script.sql";
int script_length;
bool result = false;
std::ifstream script_fs(sql_script, std::fstream::binary | std::fstream::in);
if (script_fs) {
char* buffer;
char** err_msg = NULL;
script_fs.seekg(0, script_fs.end);
script_length = script_fs.tellg();
script_fs.seekg(0, script_fs.beg);
buffer = new char[script_length];
script_fs.read(buffer, script_length);
std::cout << "sql:\n" << buffer << "\n";
if (sqlite3_exec(m_db, buffer, NULL, NULL, err_msg) == SQLITE_OK){
result = true;
} else {
std::cerr << "Error executing: " << sqlite3_errmsg(m_db) << "\n" << err_msg << "\n";
}
delete buffer;
script_fs.close();
} else {
std::cerr << "Error opening script: " << strerror(errno) << "\n";
}
return result;
}
Почему это происходит и как я могу это исправить?