Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Copie d'un fichier depuis un cd-rom, avec secteurs illisibles [ Archives / J'AI BESOIN D'AIDE !!!! :O ] (Millenod)

vendredi 21 janvier 2005 à 15:55:50 | Copie d'un fichier depuis un cd-rom, avec secteurs illisibles

Millenod

Bonjour,

Je dispose d'un cd dont je cherche à extraire les fichiers.
Malheureusement l'un de ces fichiers possède une zone avec des secteurs illisibles.

Comment puis-je copier ce fichier sachant que l'explorer de windows commence la copie, arrive sur la zone illisible, et plante.

J'ai essayé avec la fonction FileRead, du début à la fin du fichier, mais mon essai ne fut pas concluant.
cette fonction a le même problème que explorer.Exe, arrivée sur la zone illisible, le lecteur dvd tente de lire la zone à l'infinie. Seule solution : éjecter le cd et le remettre poru continuer la copie secteur par secteur (cette solution ne me convient pas).
J'ai essayé de mettre par la suite le code avec FileRead dans un thread (pour ne pas planter tout le système). Malheureusement le résultat est le même que précédemment.

Après quelque recherche, j'ai découvert dans l'api de windows, la fonction ReadFile, possédant une lecture asynchrone.


type
  TBuffer = Array[0..2047] of Byte;
var
  Buffer : TBuffer;  // buffer utilisé pour la copie
  SrcHandle, DestHandle : THandle;  // handle
  Overlapped : POverlapped; 
  Pos : integer;  // position du curseur sur le fichier source en coursde lecture
  ReadSuccess : boolean; // indique si la lecture s'est bien déroulée
  ReadCount : integer;


SrcHandle := CreateFile('E:\missions.dat', GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED or FILE_FLAG_NO_BUFFERING, 0); // ouvre le fichier source
DestHandle := CreateFile('C:\temp\test.test', fmCreate or fmOpenWrite); // crée le fichier cible

Pos := 0;
FileSeek(SrcHandle, Pos, 0); // Se positionne au début du fichier source

New(Overlapped); // Création de la structure Overlapped
Overlapped.Offset :=0;
Overlapped.OffsetHigh := 0;
Overlapped.hEvent := 0;

ReadSuccess := ReadFile(SrcHandle, Buffer, 2048, ReadCount, Overlapped); // lecture
if not ReadSuccess then Begin // la lecture ne se déroule jamais correctement au 1er coup. on cherche la raison
  case GetLastError of
    ERROR_HANDLE_EOF :  // fin du fichier
    begin
      // placer code de fin
    end;

    ERROR_IO_PENDING :  // fichier en cours de lecture
    begin
      ReadSuccess := GetOverlappedResult(SrcHandle, Overlapped^, readCount, FALSE);  // teste si la lecture s'est bien déroulée.
      if ReadSuccess then Begin
        FileWrite(DestHandle, Buffer, 2048);  // écriture du buffer dans le fichier
      End;
    End;
  End;
End;


Le code ci-dessus marche très bien, mais pour la lecture des 2048 premiers octets du fichiers.
impossible de faire un fileseek (ou SetFilePointer) pour me déplacer dessus, je lis toujours les mêmes 2048 premiers octets du fichier.

Si quelqu'un a une piste pour m'aider, car je ne maitrise vraiment pas la lecture asynchrone.
Merci

Bertrand



Cette discussion est classé dans : fichier, buffer, lecture, copie, overlapped


Répondre à ce message

Sujets en rapport avec ce message

lecture & ecriture das un fichier txt situe sur le web [ par Kosh ] Salut a tousje voudrait savoir si il y as moyen de lire un fichier text (situe sur un http ou ftp), que son contenu sois mit dans un memo pour pouvoir Ouvrir un fichier Excel ET savoir qu'il est en lecture seul [ par vagabon ] Bonjour,J'utlise OLE pour faire des ouvertures de fichiers Excel mais je n'arrive pas à savoir si le fichier est en lecture seul.Est ce que vous aurie Lecture de fichier [ par trollnumber1 ] TrollBonjours ,mon probleme est de lire le fichier que j'ai créé voici la procedure d'enregistrement que j'ai fait mais je ne sais pas comment faire p Copie de fichier [ par Kal ] De kelle maniere puis je copier un fichier d'un repertoire a un autre parce ke j'ai chercher du cote des routines de gestion de fichier mais je trouve Lecture d'un fichier [ par intello2001 ] je cherche a lire un fichier sequentielemenent (block de caractere par block de caractere) tout se que je sais c quil faut utiliser seek pour definir copie de fichiers [ par FeuilleMorte ] J'utilise une fonction qui est sencée copier tous les fichiers d'un répertoire (une quarantaine voir plus dans certains cas)dans un autre quand j'uti copie de fichier via un activeX [ par korbendallas ] bonsoir a tous, je voudrais créer un activeX pour permettre a mes clients de telecharger des fichiers doc ou xls sur un serveur http.Quelle méthode do Lecture fichier texte ligne par ligne [ par MattXSFR ] J'utilise le code suivant pour copier le contenu d'un fichier texte dans une liste box (une ligne de list box pour chaque ligne du fichier) :procedure Copie StringGrid dans fichier TXT [ par ryadus ] Salut;Je voudrais savoir comment peut on faire pour copier un tableau (StringGrid) dans un fichier TXT, histoire de sauvgarder les données du tableau; Copie de fichier .txt avec renomage et ecrasement [ par stigmate101 ] Salut a tous,Je souhaite copier un fichier .txt en le renomant et le tous en écrasant la destination. Si possible en une seule opération.Merci A+


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.