Я запускаю приложение C ++, которое обменивается данными с машиной на основе PL C.
PL C машина создает файл .db (SQLITE) после обработки деталей машиной.
Я написал функцию для переноса базы данных sqlite с PL C на P C с помощью функций libcurl.
После завершения передачи мне нужно l oop через файл db и перенести данные в таблицу базы данных сети компании.
У меня проблема с циклическим просмотром файла после завершения передачи.
Файл при чтении вызывает исключение "(11) SQLITE_CORRUPT "-" Образ диска искажен ".
Но как только я закрываю свое приложение c ++ и снова открываю, последний файл sqlite db может открываться и через l oop.
Я прилагаю код ниже, дайте мне знать, если есть способ сделать файл db доступным для чтения после передачи через библиотеку libcurl. Если я буду использовать некоторые дополнительные команды, чтобы сделать его доступным.
Информация о ftp-сервере.
char dbfile[128];
char ofile[512];
//Pulling all the information about the ftp server information from parsed.xml -> Request/DataBlock/LogFile/Host, Path, File
char *host = tagTextValue(doc, "REQUEST.DATABLOCK.LOGFILE.HOST");// -- 172.16.1.100
if (host)
{
if (char *path = tagTextValue(doc, "REQUEST.DATABLOCK.LOGFILE.PATH")) // -- /pub/export/mdt
{
if (char *file= tagTextValue(doc, "REQUEST.DATABLOCK.LOGFILE.FILE"))// -- 20200226_004636_90180.db
{
sprintf_s( dbfile, sizeof(dbfile), "ftp://%s/%s/%s", host, path, file );//Host Address
sprintf_s(ofile, sizeof(ofile), "c:\\xxxxx\\xxxxx\\%s", file);//Destination Address
}
}
}
///////////Start of FTP///////////////////
struct FtpFile
{
const char *filename;
FILE *stream;
};
FtpFile ftp =
{
ofile, /* name to store the file as if successful */
NULL
};
CURL *url = curl_easy_init();
curl_easy_setopt(url, CURLOPT_URL, dbfile);// dbfile has the complete path where to pull the file from.
FILE *ffp = fopen(ofile, "w"); // ofile mentions the destination on the receiving end
curl_easy_setopt(url, CURLOPT_WRITEFUNCTION, my_fwrite);
curl_easy_setopt(url, CURLOPT_WRITEDATA, &ftp);
curl_easy_setopt(url, CURLOPT_USERPWD, "ftpuser:xxxx");// Passing the login details to FTP server to pull the information from the 'server/machine'
CURLcode res = curl_easy_perform(url);
fclose(ffp);
curl_easy_cleanup(url);
////////////////End of FTP/////////////////////////
sqlite3 *db;
sqlite3_stmt *stmt;
char sql[1024];
Sleep(20000);
WireBondDataUploadType rec = rec2;
const char* sql1 = "select xxxxxxxxxx";
bool storeSuccessful = false;
const char *ofile2 = "c:\\xxxxx\\xxxxxxx\\20200310_021605_20039.db";
int rc;
rc = sqlite3_open(ofile, &db); //ST Opening a new Database connection
if (rc == SQLITE_OK)
{
rc=sqlite3_prepare(db, sql1, -1, &stmt, NULL);
if(rc != 0)
{
sqlite3_close(db);
}
else if(rc == SQLITE_OK)
{
//Process the information by reading the db file.
xxxxxxxx
xxxxxxxx
}
}