Re: lignes d'un fichier en C ou C++

Top Page

Reply to this message
Author: anne.guilde@free.fr
Date:  
To: ML Guilde
Subject: Re: lignes d'un fichier en C ou C++
Le 01/04/2018 à 17:01, anne.guilde@??? a écrit :
> Le 01/04/2018 à 13:14, anne.guilde@??? a écrit :
>> bonjour,
>>
>> j'ai le message suivant
>> ----
>> 10:43:06: Échec de la récupération de la date du fichier
>> « /media/anne/e63b0852-e3c8-4690-b779-28a6f785210c/initrd.img »
>> (erreur 2 : Aucun fichier ou dossier de ce type)
>> 10:43:06: Une erreur inattendue est intervenue. En voici la description :
>>
>> *** IBPP::SQLException ***
>> Context: Statement::Execute( INSERT INTO FILES (FILE_ID, FILE_NAME,
>> FILE_EXT, FILE_SIZE, FILE_DATETIME, PATH_FILE_ID, PATH_ID,
>> FILE_DESCRIPTION) VALUES (941562, 'initrd.img', 'img', 0,
>> '292278994-08-16 17:47:04', NULL, 70288, NULL) )
>> Message: isc_dsql_execute2 failed
>>
>> SQL Message : -413
>> Overflow occurred during data type conversion.
>>
>> Engine Code    : 335544334
>> Engine Message :
>> conversion error from string "292278994-08-16 17:47:04"
>> ----
>>
>> Pourquoi cette date "292278994-08-16 17:47:04"?
>>
>> La date de ce fichier est
>>
>> lrwxrwxrwx    1 root root    29 juin  21  2017 initrd.img ->
>> boot/initrd.img-4.9.0-3-amd64
>> => 21 juin 2017
>>
>> J'ai le source des programmes.
>>
>> J'ai fait une recherche avec grep sur FILE_DATETIME
>> ----
>> # grep -ir 'FILE_DATETIME' ../vvv/VVV-1.3-src/
>> Fichier binaire ../vvv/VVV-1.3-src/VVV.fbk correspondant
>> ../vvv/VVV-1.3-src/src/data_interface/fb_virtual_files.cpp:
>> FB_st->Get("FILE_DATETIME", ts);
>> ../vvv/VVV-1.3-src/src/data_interface/fb_files.cpp:    sql +=
>> wxT("FILE_NAME, FILE_EXT, FILE_SIZE, FILE_DATETIME, PATH_FILE_ID,
>> PATH_ID, FILE_DESCRIPTION) VALUES (");
>> ../vvv/VVV-1.3-src/src/data_interface/fb_files.cpp:    sql +=
>> wxT("FILE_DATETIME = ") + DateTime.Format( wxT("'%Y-%m-%d %H:%M:%S'")
>> ) + wxT(", ") +
>> ../vvv/VVV-1.3-src/src/data_interface/fb_files.cpp:
>> FB_st->Get("FILE_DATETIME", ts);
>> ../vvv/VVV-1.3-src/src/data_interface/fb_files.cpp:    sql =
>> wxT("UPDATE FILES SET FILE_DATETIME = ") + fdt.Format( wxT("'%Y-%m-%d
>> %H:%M:%S'") ) + wxT(", ");
>> ../vvv/VVV-1.3-src/src/data_interface/virtual_files.cpp:    wxString
>> sql = wxT("select virtual_files.file_id,
>> virtual_files.virtual_path_id, virtual_files.physical_file_id,
>> virtual_files.virtual_path_file_id, files.file_name, files.file_size,
>> files.file_ext, files.file_datetime, files.path_id,
>> files.path_file_id, files.file_description ");
>> ../vvv/VVV-1.3-src/src/convert_db_unicode.cpp:
>> stIn->Get("FILE_DATETIME", ts);
>> ../vvv/VVV-1.3-src/src/convert_db_unicode.cpp:        sql +=
>> wxT("FILE_NAME, FILE_EXT, FILE_SIZE, FILE_DATETIME, PATH_FILE_ID,
>> PATH_ID, FILE_DESCRIPTION) VALUES (");
>> ../vvv/VVV-1.3-src/VVV.sql:    FILE_DATETIME     TIMESTAMP,
>> ../vvv/VVV-1.3-src/VVV.sql:                insert into FILES( FILE_ID,
>> FILE_NAME, FILE_SIZE, FILE_EXT, FILE_DATETIME, PATH_ID )
>> ----
>>
>> J'ai une recherche dans ce fichier
>> /vvv/VVV-1.3-src/src/data_interface/fb_files.cpp:
>> ...
>>          FB_st->Get("FILE_DATETIME", ts);
>>
>>          DateTime.Set( ts.Day(), (wxDateTime::Month) (wxDateTime::Jan
>> + ts.Month() - 1), ts.Year(), ts.Hours(), ts.Minutes(),  ts.Seconds() );
>> ...
>>
>> Je ne comprends pas vraiment cette syntaxe.
>>
>> Si quelqu'un pouvait me décortiquer
>>
>
> suite de mes questions
>
> - Comment faire pour faire du pas à pas (mode debug)?
> Il faut recompiler?
> Si oui, comment et quel paquet installer?
>
> - C'est du c++ si j'ai bien vu
> Le source se trouve ici
> https://sourceforge.net/projects/vvvapp/files/VVV/1.3/
>
> J'ai fait des recherches avec ' sql ' dans  VVV-1.3-src.
> J'en suis arrivée qu'il faut que je modifie dans
> VVV-1.3-src/src/data_interface/fb_files.cpp.
>
> Il faudrait tester FILE_DATETIME avant de faire le sql.
> Mais comment faire cela en c++
>


suite
le programme que je veux modifier
https://pastebin.com/iCvf2yr2

il faut tester la date
void CFiles::FB_FetchRow(void) {
...
        FB_st->Get("FILE_DATETIME", ts);


        DateTime.Set( ts.Day(), (wxDateTime::Month) (wxDateTime::Jan + 
ts.Month() - 1), ts.Year(), ts.Hours(), ts.Minutes(), ts.Seconds() );
...


Si quelqu'un peut jeter un oeil

merci
Anne