Recherche rapide dans un gros fichier inconnu
A toi XXX XXXXX!
On ne peut pas tout le temps ouvrir un fichier même en lecture. ça dépend qui l'a ouvert et comment il est ouvert.
On ne peut pas tout le temps ouvrir un fichier même en lecture. ça dépend qui l'a ouvert et comment il est ouvert.
Dernière modification par Ollivier le sam. 18/août/2007 3:13, modifié 1 fois.
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Ouh la la !!!! que de reponses
Merci les amis de vos aides nombreuses, cela me fait chaud au coeur
Par contre lui il arrive a lire, je ne sais pas si c'est jusqu'au bout ?
Il ecrit noir de hieroglyphe (normal puisque c'est un format à la c..,mais au milieu y'a ce qui m'interesse en ASCII)
Mais y'a pas deplantage, il est fort ce NOTEPAD, hein ?
Ce que j'ai oublié de vous dire c'est que je peux le copier sans bleme
@CPL.BATOR
Je te remercie de ton code.
Je l'ai éssayé et il fait la meme erreur que le miens
à la ligne 23 = "ReadData(IdFichier,*Buffer, Size) "
File object not initialized
Et pourtant buffer remonte une adresse et size la taille du fichier.
Et comme dirais "jacques houille"
DIIIINGUEEEEE !!!
Merci les amis de vos aides nombreuses, cela me fait chaud au coeur

Je laisse bien fermé le NOTEPAD, ce n'est pas ça qui gene, je suis sur.Ollivier a écrit :Tu sais Kcc, si tu ouvres ton fichier avec Notepad, et que tu lis avec PureBasic, n'oublie pas de fermer Notepad... Mh?![]()
Par contre lui il arrive a lire, je ne sais pas si c'est jusqu'au bout ?
Il ecrit noir de hieroglyphe (normal puisque c'est un format à la c..,mais au milieu y'a ce qui m'interesse en ASCII)
Mais y'a pas deplantage, il est fort ce NOTEPAD, hein ?
Ce que j'ai oublié de vous dire c'est que je peux le copier sans bleme
cpl.bator a écrit :j'ai zappé cela de ton post, ne me dis pas que tu essayes de lire un fichier avec une adresse internet
imagine le truc
Non non c'est sur un reseau interne, par l'explorateur, sur le serveur.Bombseb a écrit :quand tu dis sur un serveur protégé ca veux dire quoi exactement ?
le chemin du fichier commence par quoi "http://leserveur" ou "\\leserveur" ?
@CPL.BATOR
Je te remercie de ton code.
Je l'ai éssayé et il fait la meme erreur que le miens

à la ligne 23 = "ReadData(IdFichier,*Buffer, Size) "
File object not initialized

Et pourtant buffer remonte une adresse et size la taille du fichier.
Et comme dirais "jacques houille"
DIIIINGUEEEEE !!!
Non, c'est normalKwai chang caine a écrit :Je te remercie de ton code.
Je l'ai éssayé et il fait la meme erreur que le miens![]()
à la ligne 23 = "ReadData(IdFichier,*Buffer, Size) "
File object not initialized![]()
Et pourtant buffer remonte une adresse et size la taille du fichier.
Et comme dirais "jacques houille"
DIIIINGUEEEEE !!!

Si ReadFile() ne réussit pas, tu ne peux pas y accéder avec ReadData().
Il faut toujours vérifier le succès d'une fonction :
Code : Tout sélectionner
MonFichier = ReadFile(#PB_Any, "MonFichier")
If MonFichier
;
; Faire des trucs avec MonFichier
;
CloseFile(MonFichier)
Else
Debug "Marche pas ..."
EndIf
Tu peux essayer de l'ouvrir via l'API Windows : regarde le fichier 'API-FileHandle.pbi' dans le répertoire 'Include' de jaPBe.
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Voilà :
Code : Tout sélectionner
;info:Create and Read file with API
;Use PB-Memory
Structure API_FileHandle
FHandle.l
Buffer.l
BufferLen.l
ReadPos.l
DataInBuffer.l
readed.l
EndStructure
Procedure API_LOF(*File.API_FileHandle)
ProcedureReturn GetFileSize_(*File\FHandle,0)
EndProcedure
Procedure API_CloseFile(*File.API_FileHandle)
If *File\FHandle<>#INVALID_HANDLE_VALUE
CloseHandle_(*File\FHandle)
EndIf
If *File\Buffer
FreeMemory(*File\Buffer):*File\Buffer=0
EndIf
EndProcedure
Procedure API_FileReadEx(*File.API_FileHandle,File$,BufferLen)
*File\FHandle=CreateFile_(File$,#GENERIC_READ,#FILE_SHARE_READ,0,#OPEN_EXISTING,#FILE_ATTRIBUTE_NORMAL,0)
If *File\FHandle=#INVALID_HANDLE_VALUE
ProcedureReturn #False
Else
*File\BufferLen=BufferLen
*File\Buffer=AllocateMemory(*File\BufferLen)
*File\ReadPos=*File\Buffer
*File\DataInBuffer=0
ProcedureReturn #True
EndIf
EndProcedure
Procedure API_FileRead(*File.API_FileHandle,File$)
ProcedureReturn API_FileReadEX(*File,File$,1024*4)
EndProcedure
Procedure API_ReadData(*File.API_FileHandle,*Buffer,len)
result=0
If *File\DataInBuffer>=len
CopyMemory(*File\ReadPos,*Buffer,len)
*File\DataInBuffer-len
If *File\DataInBuffer
*File\ReadPos+len
Else
*File\ReadPos=*File\Buffer
EndIf
result=len
Else
If *File\DataInBuffer>0
CopyMemory(*File\ReadPos,*Buffer,*File\DataInBuffer)
*Buffer+*File\DataInBuffer
result=*File\DataInBuffer
len-*File\DataInBuffer
*File\DataInBuffer=0
*File\ReadPos=*File\Buffer
EndIf
If ReadFile_(*File\FHandle,*Buffer,len,@readed,0)<>0
result+readed
*File\readed+readed
EndIf
EndIf
ProcedureReturn result
EndProcedure
Procedure API_CurrentPos(*File.API_FileHandle)
ProcedureReturn *File\readed-*File\DataInBuffer
EndProcedure
Procedure API_ReadByte(*File.API_FileHandle)
If *File\DataInBuffer=0
If ReadFile_(*File\FHandle,*File\Buffer,*File\BufferLen,@readed,0)<>0
*File\readed+readed
*File\DataInBuffer=readed
*File\ReadPos=*File\Buffer
EndIf
EndIf
If *File\DataInBuffer
result=PeekB(*File\ReadPos) &$FF : *File\ReadPos+1:*File\DataInBuffer-1
Else
result=-1
EndIf
ProcedureReturn result
EndProcedure
Procedure API_PushBackByte(*File.API_FileHandle)
If *File\ReadPos>*File\Buffer
*File\ReadPos-1:*File\DataInBuffer+1
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure API_EOF(*File.API_FileHandle)
If API_ReadByte(*File)=-1
ProcedureReturn #True
Else
API_PushBackByte(*File)
ProcedureReturn #False
EndIf
EndProcedure
Procedure.s API_ReadString(*File.API_FileHandle)
a$=""
ende=#False
Repeat
byte=API_ReadByte(*File)
Select byte
Case 0:ende=#True
Case 10:ende=#True:byte=API_ReadByte(*File):If byte<>13 And byte<>10 And byte<>0 And byte<>-1: API_PushBackByte(*File) :EndIf
Case 13:ende=#True:byte=API_ReadByte(*File):If byte<>13 And byte<>10 And byte<>0 And byte<>-1: API_PushBackByte(*File) :EndIf
Case -1:ende=#True
Default
a$+Chr(byte)
EndSelect
Until ende
ProcedureReturn a$
EndProcedure
Procedure API_FileCreate(*File.API_FileHandle,File$)
*File\FHandle=CreateFile_(File$,#GENERIC_WRITE ,0,0,#CREATE_ALWAYS ,#FILE_ATTRIBUTE_NORMAL,0)
If *File\FHandle=#INVALID_HANDLE_VALUE
ProcedureReturn #False
Else
ProcedureReturn #True
EndIf
EndProcedure
Procedure API_WriteData(*File.API_FileHandle,*Buffer,len)
If WriteFile_(*File\FHandle,*Buffer,len,@written,0)
ProcedureReturn written
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure API_WriteString(*File.API_FileHandle,a$)
ProcedureReturn API_WriteData(*File,@a$,Len(a$))
EndProcedure
Procedure API_WriteStringN(*File.API_FileHandle,a$)
a$+Chr(13)+Chr(10)
ProcedureReturn API_WriteData(*File,@a$,Len(a$))
EndProcedure
Procedure API_Seek(*File.API_FileHandle,Pos,How)
#Seek_Begin=#file_begin
#Seek_Curent=#file_current
#seek_End=#file_end
result=SetFilePointer_(*File\FHandle,Pos,0,How)
If result<>-1
*File\DataInBuffer=0
*File\readed=result
EndIf
EndProcedure
; FHandle.API_FileHandle
; File$="Hallo.txt"
; random$=Str(Random(1000))
; Debug "random:"+random$
; If API_FileCreate(FHandle,File$)
; API_WriteString(FHandle,"Test ")
; API_WriteStringN(FHandle,"Hallo")
; API_WriteStringN(FHandle,"Zeile 2")
; API_WriteStringN(FHandle,"Zeile 3")
; API_WriteStringN(FHandle,random$)
; API_CloseFile(FHandle)
; EndIf
; Debug "---"
; If API_FileRead(FHandle,File$)
; While API_EOF(FHandle)=#False
; Debug API_ReadString(FHandle)
; Wend
; API_CloseFile(FHandle)
; EndIf
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Nadine !!!
J'suis "dégoutanisé of the life"
Encore une erreur à la ligne 25 qui retourne un false :
Y commence à nous brouter les noyau ce fichier de serveur 
J'suis "dégoutanisé of the life"

Encore une erreur à la ligne 25 qui retourne un false :
Code : Tout sélectionner
If *File\FHandle=#INVALID_HANDLE_VALUE
ProcedureReturn #False

une idée serait de savoir quelle erreur est renvoyée par l'OS avec GetLastError_().
Code : Tout sélectionner
Macro LastErrorMessageRequester()
MessageRequester("LastError", Left(LastErrorMessage.s{4096}, FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError_(), 0, @LastErrorMessage, 4095, 0) - 2), #MB_ICONERROR)
EndMacro
distant$ = "\\monserveur\mondossier\monfichier.txt"
fichier$ = GetTemporaryDirectory() + "monfichier.txt"
If CopyFile(distant$, fichier$)
If OpenFile(0, fichier$)
MessageRequester("Information", "Fichier ouvert")
CloseFile(0)
Else
LastErrorMessageRequester()
EndIf
If Not DeleteFile(fichier$)
LastErrorMessageRequester()
EndIf
Else
LastErrorMessageRequester()
EndIf
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Mefiance Ollivier, les apparences sont parfois trompeuses....
J'echange sans reflechir mes vacances contre mon boulot.
Au boulot, c'est PC et prog (Enfin pour l'instant)
En vacances, c'est beton, moellon, perfo, etc ..... et tout ça presque tous les jours, et cela depuis pres de 16 ans
Vivement le boulot que je me repose
J'echange sans reflechir mes vacances contre mon boulot.
Au boulot, c'est PC et prog (Enfin pour l'instant)
En vacances, c'est beton, moellon, perfo, etc ..... et tout ça presque tous les jours, et cela depuis pres de 16 ans

Vivement le boulot que je me repose
