Chouchensb
Messages postés64Date d'inscriptionjeudi 3 mars 2005StatutMembreDernière intervention 2 septembre 2010
-
6 oct. 2005 à 00:12
Chouchensb
Messages postés64Date d'inscriptionjeudi 3 mars 2005StatutMembreDernière intervention 2 septembre 2010
-
6 oct. 2005 à 21:20
Bonjour,
Voilà, je souhaite supprimer les premiers octets d'un fichier. Par exemple, si le fichier commence par "#589632abcdef...", je voudrais supprimer "#589632" pour qu'il commence par "abcdef...".
Connaissez vous un moyen rapide d'effectuer cela sans avoir à réecrire un nouveau fichier en lisant les octets un par un de l'ancien fichier. Merci!
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 6 oct. 2005 à 00:23
Pour de l'ultra rapide faut passer par API:
prepare un tampon, 32 Ko par Space() sur un String,
CreateFile pour ouverture,
SetFilePointer,
ReadFile en boucle tant que sort des octets,
replace avec SetFilePointer,
WriteFile dans la boucle,
CloseHandle pour fermer.
Chouchensb
Messages postés64Date d'inscriptionjeudi 3 mars 2005StatutMembreDernière intervention 2 septembre 2010 6 oct. 2005 à 21:20
Bon, en fait j'ai utilisé des fonctions classiques de VBA à la place des API (Les API, c'est trop obscure pour moi! Les seules API que j'ai utilisées me servent à tronquer la fin du fichier -> elles proviennent d'un autre message sur ce forum, j'ai juste fait du copier-coller, ça c'était facile!). J'ai employé ta technique (travailler par bloc de 32000octets), c'est vrai que c'est largement plus rapide. Pour info, j'ai recopié le code que j'ai utilisé...
Merci pour l'astuce.
'------------------------------------------------------------------------------------------------------------'
' FileConversion(FilePath As String) '
'------------------------------------------------------------------------------------------------------------'
' Convert a binary block data in IEEE-488.2 # format into a file that can be read by windows. '
' - FilePath: path of the file to be converted '
' Example: FileConversion("c:\windows\temp\file.bin") '
'------------------------------------------------------------------------------------------------------------'
Const NBYTES = 32000
Dim Reading_nByte As String
Reading_nByte = Space(NBYTES)
Dim Reading_Char As String * 1
Dim Header_Size As Integer
Dim Filenum As Integer
Dim FileSize As Long
Dim hFile As Long
Dim i As Long
'We open the file
Filenum = FreeFile
Open FilePath For Binary As Filenum
'We read the header and determine the header size
Get #Filenum, 2, Reading_Char
Header_Size = 2 + CInt(Reading_Char)
'We determine the file size
FileSize = LOF(Filenum)
'We shift the binary data within the file (with a negative offset equal to the header size)
For i = 1 + Header_Size To FileSize Step NBYTES
Get #Filenum, i, Reading_nByte
Put #Filenum, i - Header_Size, Reading_nByte
Next i
'We close the file
Close Filenum
'We truncate the end of the file (API)
hFile = CreateFile(FilePath, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ, ByVal 0&, OPEN_EXISTING, 0, 0)
SetFilePointer hFile, FileSize - Header_Size, 0&, FILE_BEGIN
SetEndOfFile hFile
CloseHandle hFile
Chouchensb
Messages postés64Date d'inscriptionjeudi 3 mars 2005StatutMembreDernière intervention 2 septembre 2010 6 oct. 2005 à 00:49
Aurais tu un example de code à me montrer? Je suis pas très familier de l'utilisation des API et là, j'avoue que j'ai un peu du mal à coder avec ça...
(je viens d'essayer de pondre un truc en copiant/collant des bouts de codes piochés ça et là, mais ça vient de planter mon appli)
Merci beaucoup et désolé de t'embêter autant
Vous n’avez pas trouvé la réponse que vous recherchez ?