IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Problème de fichier [FAQ]


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Par défaut Problème de fichier
    Salut!!

    J'ai une FileListBox et j'aimerai supprimer dans la FileListBox les fichiers suprérieur a 30 000 octets.

    Le trie ne s'effectue pas correctement ou selon les cas ca passe et d'autres non.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    FileListBox2->ApplyFilePath("D:\\test");
    FileListBox2->Update();
     
    AnsiString fichier;
    AnsiString fichier2;
    AnsiString test;
    for (int i = 0; i < FileListBox2->Items->Count; i++)
    {fichier=FileListBox2->Items->Strings[i];
    fichier2="D:\\test\\"+fichier;
    int FichierHandle = FileOpen(fichier2, fmOpenRead);
     
    test=FormatFloat("", FileSeek(FichierHandle, 0, 2));
     
    if (test>30000) 
    {FileListBox2->Items->Delete(i);}
    FileClose(FichierHandle);

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Hello

    FileSeek renvoie un entier. Déclares donc ta variable test sous forme de int plutot que d'AnsiString. Du coup, tu n'as plus besoin du FormatFloat.
    Ca devrait arranger tes affaires. Comparer des valeurs numériques en passant par des chaines, ça ne donne pas forcément le même résultat.

    A++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Par défaut
    Merci, mais ca n'arrange pas le problème, il reste des fichiers supérieur a 300 octet et des fichier inférieur a 300 octets qui ne s'affiche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    AnsiString fichier;
    AnsiString fichier2;
    int test;
    for (int i = 0; i < FileListBox2->Items->Count; i++)
    {
    fichier=FileListBox2->Items->Strings[i];
    fichier2="D:\\test\\"+fichier;
    int FichierHandle = FileOpen(fichier2, fmOpenRead);
     
    test=FileSeek(FichierHandle, 0, 2);
     
     
            if (test>300)  
            {
            FileListBox2->Items->Delete(i);
            }
    FileClose(FichierHandle);
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Par défaut
    J'ai également testé ca, pareil :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    AnsiString fichier;
    AnsiString fichier2;
     
    for (int i = 0; i < FileListBox2->Items->Count; i++)
    {
    fichier=FileListBox2->Items->Strings[i];
    fichier2="D:\\test\\"+fichier;
     
      HANDLE hdl = CreateFile(fichier2.c_str(),  GENERIC_READ|GENERIC_WRITE,
      0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
     
      int nb = GetFileSize(hdl, NULL);
     
          if (nb>300)
            {
            FileListBox2->Items->Delete(i);
            }
     
      CloseHandle(hdl);

  5. #5
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Pourquoi n'utilises tu pas les possibilités de Tsearchrec ? Tu as la possibilité de connaître la taille des fichiers plutôt que d'ouvrrir le fichier pour en connaître la longueur.
    Ceci dit, je ne connais pas TFileListBox
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Par défaut
    Je connais pas, est ce que c'est ca ?

    FindFirst("c:\\Program Files\\bcb6\\bin\\*.*", faAnyFile, SearchRec);
    test=IntToStr(SearchRec.Size) ;

    La c'est juste pour le 1er fichier ? Ensuite pour les autres fichier ??

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Hello

    Une remarque sur ta boucle for: quand tu fais un delete(i), l'élément est supprimé, les suivants se décalent pour remplir le vide, puis i est incrémenté. Résultat, l'élément qui a pris la place de l'élément supprimé n'est pas traité, si je ne m'abuse.
    A essayer: Parcours tes items à rebours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (int i = FileListBox2->Items->Count-1; i >= 0; i--)
      {...

  8. #8
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Re,

    Pour le FindFirst, regarde ici: http://c.developpez.com/faq/bcb/?pag...iersrepertoire

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Par défaut
    Citation Envoyé par totoche76
    Hello

    Une remarque sur ta boucle for: quand tu fais un delete(i), l'élément est supprimé, les suivants se décalent pour remplir le vide, puis i est incrémenté. Résultat, l'élément qui a pris la place de l'élément supprimé n'est pas traité, si je ne m'abuse.
    A essayer: Parcours tes items à rebours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (int i = FileListBox2->Items->Count-1; i >= 0; i--)
      {...
    Je pense aussi que l'erreur vient de la, parcourire les items à rebours, c'est à dire ?

  10. #10
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Code:
    for (int i = FileListBox2->Items->Count-1; i >= 0; i--)
    {...


    Je pense aussi que l'erreur vient de la, parcourire les items à rebours, c'est à dire ?
    parcourir en partant du dernier dans la liste pour arriver au premier. cf le bout de code.

    A++

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Par défaut
    Merci je vais tester ca, j'avais pas remarqué

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 24
    Par défaut
    Merci ca marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     
    AnsiString fichier;
    AnsiString fichier2;
    int test;
    for (int i = FileListBox2->Items->Count-1; i >= 0; i--)
    {
    fichier=FileListBox2->Items->Strings[i];
    fichier2="D:\\test\\"+fichier;
    int FichierHandle = FileOpen(fichier2, fmOpenRead);
     
    test=FileSeek(FichierHandle, 0, 2);
     
     
            if (test>300)
            {
            FileListBox2->Items->Delete(i);
            }
    FileClose(FichierHandle);
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Delphi 3] Problème avec fichier ressource .RES
    Par delphim dans le forum EDI
    Réponses: 2
    Dernier message: 28/06/2005, 18h11
  2. [Servlet] Probléme écriture fichier
    Par hedgehog dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 23/05/2005, 15h17
  3. Problème lecture fichier en C++
    Par cali1983 dans le forum C++
    Réponses: 17
    Dernier message: 20/05/2005, 09h36
  4. Problème ouverture fichier par double clic...
    Par sankookai dans le forum MFC
    Réponses: 4
    Dernier message: 11/05/2005, 09h13
  5. Problème avec fichier texte
    Par jpdelx dans le forum ASP
    Réponses: 7
    Dernier message: 13/11/2003, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo