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

Page principale

Répondre à ce message
Auteur: anne.guilde@free.fr
Date:  
À: guilde
Sujet: Re: lignes d'un fichier en C ou C++
Le 02/04/2018 à 18:41, Jérôme Villafruela a écrit :
> 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 reproduit le problème avec exactement le même message, dans mon cas
> le fichier causant le problème est un lien symbolique dont la cible
> n'est pas accessible (sur une partition non montée) , est ce aussi le
> cas ici ?
>
>


C'est tout à fait cela.
Tu as aussi la date "292278994-08-16 17:47:04"?


>>> 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
>>>
>>
>
> DateTime est un objet de type wxDateTime (de la bibliothèque wxWidgets,
> défini dans la classe CFiles, source files.h )  dont on appelle la
> métode Set
> (http://docs.wxwidgets.org/stable/classwx_date_time.html#a6f7ee89e55144c61ac19a6543e67db6a
> )
>
>
>> suite de mes questions
>>
>> - Comment faire pour faire du pas à pas (mode debug)?
>> Il faut recompiler?
>> Si oui, comment et quel paquet installer?
>
> L'outil de build utilisé est CMake, il faut installer :
>
> apt install build-essentials
> apt install cmake
>
> Pour lancer le build :
>
> cd VVV-1.3-src/src
> cmake .
>
> Mais chez moi le build échoue car il manque des dépendances, je ne
> connais pas CMake, y a t'il moyen de récupérer automatiquement la liste
> des dépendances ?
> Dans CMakeLists.txt Il y  a une ligne :
>
> FIND_PACKAGE(wxWidgets REQUIRED html adv core base net aui xrc qa
> richtext )
>
> comment se fait le lien avec le nom des paquets ?
>
> Bonne soirée,
>
> Jérôme
>


Merci pour tous ces renseignements.

Je vais faire des essais...

Encore des questions :

avec la commande find, il y a l'option -P et -F

        -P     Ne jamais suivre les liens symboliques, ce qui est le 
comportement par défaut. Quand find analyse ou affiche les informations 
concernant un fichier, et que ce fichier  est un lien symbolique, les 
informations utilisées sont celles qui concernent le lien symbolique 
lui-même (et non le fichier pointé).


        -L     Suivre  les  liens  symboliques. Quand find analyse ou 
affiche les informations concernant un fichier, ce sont celles extraites 
des caractéristiques du fichier vers lequel mène les liens, et non celle 
du lien lui-même (sauf s'il s'agit d'un lien cassé, ou si find est 
incapable d'analyser le fichier vers lequel pointe le lien). 
L'utilisation de  cette  option implique -noleaf qui sera toujours 
active pour les utilisations ultérieures de l'option -P. Si l'option -L 
est active et que find découvre un lien symbolique vers un 
sous-répertoire lors de ses recherches, le sous-répertoire pointé par le 
lien symbolique sera examiné.


               Quand l'option -L est active, le prédicat -type 
correspondra toujours au type du fichier pointé par le lien symbolique 
plutôt que celui du lien lui-même (sauf si  le  lien symbolique est 
cassé). Les prédicats -lname et -ilname renvoient toujours faux lors de 
l'utilisation de -L.


Y-a-t-il ce genre de subtilités en C++?

En C++, dans les sources de vvv où lit-il les répertoires/fichiers?

Merci
Anne