begin process at 2010 02 09 21:39:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Delphi

 > 

Archives

 > 

J'AI BESOIN D'AIDE !!!! :O

 > 

Copie d'un fichier depuis un cd-rom, avec secteurs illisibles


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Copie d'un fichier depuis un cd-rom, avec secteurs illisibles

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ée 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...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales