Page 2 sur 3

Publié : mer. 08/août/2007 23:10
par Ollivier
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.

Publié : jeu. 09/août/2007 8:01
par Kwai chang caine
Ouh la la !!!! que de reponses
Merci les amis de vos aides nombreuses, cela me fait chaud au coeur 8)
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? :D :D
Je laisse bien fermé le NOTEPAD, ce n'est pas ça qui gene, je suis sur.
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
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" ?
Non non c'est sur un reseau interne, par l'explorateur, sur le serveur.

@CPL.BATOR

Je te remercie de ton code.
Je l'ai éssayé et il fait la meme erreur que le miens :cry:
à 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 !!!

Publié : jeu. 09/août/2007 10:24
par Anonyme
Ollivier a écrit :mon petit père , A toi mon grand!
:?

Publié : jeu. 09/août/2007 12:28
par gnozal
Kwai chang caine a écrit :Je te remercie de ton code.
Je l'ai éssayé et il fait la meme erreur que le miens :cry:
à 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 normal :wink:
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
Quand à la raison du problème avec ReadFile(), c'est bien possible qu'il ne puisse pas ouvrir des fichiers déjà ouverts, s'il lui manque le flag #FILE_SHARE_READ.
Tu peux essayer de l'ouvrir via l'API Windows : regarde le fichier 'API-FileHandle.pbi' dans le répertoire 'Include' de jaPBe.

Publié : jeu. 09/août/2007 12:36
par Kwai chang caine
Bonjour GNOZAL

Je te remercie de ta reponse, mais je suis peut etre le seul encore au monde a utiliser l'IDE de PURE :lol:

J'essaierais d'installer Japbe pour voir ce qu'il y a dans ce "'API-FileHandle.pbi' "

Encore merci de ton aide 8)

Publié : jeu. 09/août/2007 12:41
par gnozal
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

Publié : jeu. 09/août/2007 12:44
par Kwai chang caine
AAaaaahhh !!!

Tu es une mere pour moi 8)

Je regarde .....non j'ai pas dit que j'ai compris, les miracles c'est à noel :D , j'ai dit que je regarde et je te tiens au courant

Mille merci

Publié : jeu. 09/août/2007 12:57
par Kwai chang caine
Nadine !!!
J'suis "dégoutanisé of the life" :cry:

Encore une erreur à la ligne 25 qui retourne un false :

Code : Tout sélectionner

If *File\FHandle=#INVALID_HANDLE_VALUE 
    ProcedureReturn #False 
Y commence à nous brouter les noyau ce fichier de serveur :?

Publié : jeu. 09/août/2007 21:54
par Flype
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

Publié : jeu. 16/août/2007 2:45
par Kwai chang caine
J'suis en vacance et donc plus avec le fameux fichier qui me cause "boucou du soucis", je jeterais un "zieu" dans 10 jours.

Merci FLYPE

Publié : ven. 17/août/2007 19:47
par Ollivier
Et ben... Y'en a qu'ont de la chance...

Publié : ven. 17/août/2007 20:10
par Kwai chang caine
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 :cry:

Vivement le boulot que je me repose :D

Publié : ven. 17/août/2007 20:23
par Ollivier
Moi c'est boulot, boulot, boulot, vacances=stage, boulot, boulot...
La prog est une passion.

Publié : ven. 17/août/2007 23:23
par Flype
Bah moi je programme à donf depuis 3 ans en entreprise.
C'est aussi une passion pour moi, c'est ce qui me fait tenir...
mais vu le rythme, sans vacances, je pèterais un fusible.

Publié : ven. 17/août/2007 23:34
par Ollivier
La seule différence fondamentale par rapport à vous, c'est que ma deuxième passion c'est la plongée sous-marine. Je suis en vacances tous les soirs de l'année...

Mais le rapport condition de vie/gain de vie n'est pas le même.