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

Delphi Discussion :

Dossier introuvable mais visible par IE


Sujet :

Delphi

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Dossier introuvable mais visible par IE
    Bonjour à tous,

    je rencontre un problème avec Windows : j'ai réalisé un programme de sauvegarde des différents fichiers journaliers de ma gestion de données, ceci en créant un dossier de cette forme " 29-10 18-11-34 " généré par les fonctions "dates" de Delphi.
    Lorsque je veux supprimer ces dossiers Windows me demande de les vider, ok je les vide, ensuite Windows me dit que ces dossiers sont introuvables...bien que visibles dans l'explorateur.
    J'ai essayé plusieurs méthodes sans succès pour les supprimer.
    La seule solution que j'ai à ce jour :
    une bizarrerie de Windows qui ne les trouve pas mais qui accepte de les déplacer,
    je crée un nouveau dossier dans lequel je glisse ces dossiers vides indésirables afin de ne plus les voir dans mon architecture de gestion.
    findfirst, findnext deletefile ne réagissent pas ...
    Si quelqu'un à une suggestion merci d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 206
    Points
    206
    Par défaut
    Bonjour

    vous avez mis un espace en debut et fin de nom des repertoires ?
    Quel version de Windows et delphi ?

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Fichier introuvable mais visible par IE
    Bonjour
    delphi XE7 pas d'espace à l'avant du nom de fichier
    les sauvegarde ont été effectuées sous Windows 95, 7 et en ce moment Windows 10.
    Remplis ou vides ces répertoires qui ne sont pas " vus " restent déplaçables.
    J'ai fait hier un test nouveau :
    Après avoir créer une nouvelle partition sur le disque j'ai déplacé ces dossiers dans cette nouvelle partition et la suppression s'est faite sans plus...
    Toutefois je ne considère pas cela comme la solution car un utilisateur lambda ne saurait l'effectuer.

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 685
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    Citation Envoyé par vmagnini Voir le message
    une bizarrerie de Windows qui ne les trouve pas mais qui accepte de les déplacer
    Pas forcément, ça dépend des fonctions utilisées, un MoveFileW peut passer alors qu'un MoveFileA va échouer*. Et ce n'est pas ici une question d'encodage mais de longueur de chaîne.

    Les chaînes (chemin\fichier) ne doivent pas dépasser MAX_PATH (260 caractères) à moins de les préfixer par \\?\. As-tu essayé de passer le paramètre sous la forme \\?\c:\monrep\monfichier ?

    Si ce n'est pas ça, s'il te plaît soit plus précis dans la description du problème. Difficile de faire la part des choses entre Windows 95 (!), les API, l'Explorateur de fichiers, Internet Explorer (IE dans le titre), les opérations manuelles et celles automatisées...



    * Depuis Windows 10 Anniversary, on peut supprimer définitivement ce besoin de préfixer pour autant qu'on utilise les versions Unicode (W) des fonctions (Delphi les utilise par défaut) :
    HKLM\SYSTEM\CurrentControlSet\Control\FileSystem -> LongPathsEnabled.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Fichier introuvable mais visible par IE
    Bonjour et merci de ces renseignements.

    Je ne suis pas grand spécialiste de Windows malheureusement et je me contente de programmer avec Delphi.
    En fait j'utilise la fonction "supprimer" proposée par l'API et comme je l'ai indiqué précédemment que le dossier soit vidé de son contenu ou pas le résultat est le même :
    'Introuvable'.
    Ce que j'ai oublié de dire c'est que des dossiers de sauvegarde se trouvent eux-mêmes placés dans un dossier conteneur ce qui donne à titre d'exemple :
    Sauvegarde :
    28-08-2017 15-32
    29-08-2017 17-10
    etc.
    Lorsque je veux supprimer ou renommer les sous-dossiers ce sont ceux-là qui sont en cause, par contre je renomme le dossier principal "Sauvegarde" sans problème,
    le déplace et le résultat est toujours le même sauf comme je l'ai indiqué si je le déplace dans un disque différent et encore ce n'est pas systématique..

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 685
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    Ca n'aide pas.

    Donne-nous le chemin complet et montre-nous le code de la boucle FindFirst/FindNext.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut voici le code
    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
    procedure readdir(path : string);
     
    var
      sRec       : TSearchRec;
      i,result     : integer;
      st : string;
      st2         : PWideChar;
    begin
      if FindFirst (path,faanyFile,SRec) = 0 then
       begin
         repeat
           findnext (SRec);
           st := srec.name;
           if (st = '.') or (st = '..') then st := '';
           st2 := PWideChar(WideString(st)) ;
           DeleteFile(st2);
           result := findNext (SRec);
        until result <> 0;
       end;
    end;
    Ce code a été modifié plusieurs fois sans aucun effet ni delete ni rename ou autre

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 206
    Points
    206
    Par défaut
    Bonjour

    il me semble que st2 ne contient que le nom du fichier
    il faut donc construire le nom complet en concaténant path et st2

  9. #9
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 685
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    ...et FindNext est appelé deux fois pas boucle !

    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
    procedure readdir(Path : string);
    var
      SRec :TSearchRec;
     
    begin
      Path := IncludeTrailingPathDelimiter(Path);
     
      if FindFirst(Path +'*', faAnyFile, SRec) = 0 then
      repeat
        if (SRec.Name <> '.') and (SRec.Name <> '..') then
          DeleteFile(Path +SRec.Name);
      until FindNext(SRec) <> 0;
     
      FindClose(SRec);
    end;

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut voici le code copié
    j'ai copié ce code mais à la compil Delphi envoie erreur : Types incompatibles "PWidechar" et "String"

  11. #11
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 685
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    Dans les uses, déplace SysUtils après Windows.

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut voici le code copié
    Citation Envoyé par Andnotor Voir le message
    Dans les uses, déplace SysUtils après Windows.
    sysutils se trouve dans uses

  13. #13
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 685
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    Citation Envoyé par vmagnini Voir le message
    sysutils se trouve dans uses
    Je m'en doute bien mais tu n'as pas compris ; l'ordre dans lequel apparaissent ces unités est important si plusieurs d'entres-elles déclarent une procédure du même nom (ici DeleteFile).

    SysUtils.DeleteFile attend une string alors que Windows.DeleteFile un PChar.

    Sinon, tu peux aussi modifier l'appel comme suit DeleteFile(PChar(Path +SRec.Name)).

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Bonjour
    Merci d'avoir bien voulu t'intéresser à mon problème, toutefois, après bien des essais rien ni fait Windows a ses manies...
    J'ai donc pris la décision radicale : réécrire ma sauvegarde et reformater la partition qui contient 4 années de sauvegardes journalières (4 fois par jour ouvré) cela libérera une bonne partie du stockage.
    Je suis en charge, depuis 24 ans, de la gestion d'une PME d'une soixantaine d'employés et il me reste peu de temps pour chercher.
    Encore merci
    V.magnini

Discussions similaires

  1. HDD non détecté par OS mais visible dans le BIOS
    Par TheBlackReverand dans le forum Composants
    Réponses: 6
    Dernier message: 18/08/2016, 09h17
  2. Réponses: 2
    Dernier message: 18/07/2016, 10h04
  3. [WinCE][CF 1.2/VB.net]variable visible par toute l'apli
    Par zitoun dans le forum Windows Mobile
    Réponses: 1
    Dernier message: 01/06/2006, 14h28
  4. Réponses: 7
    Dernier message: 23/10/2005, 21h52
  5. Réponses: 4
    Dernier message: 07/12/2002, 15h24

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