[OK] Incompréhension entre Openfile, ReadFile, MD5FileFinger

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Naheulf
Messages : 193
Inscription : dim. 10/mars/2013 22:22
Localisation : France

[OK] Incompréhension entre Openfile, ReadFile, MD5FileFinger

Message par Naheulf »

Je ne comprend pas pourquoi MD5FileFingerprint fonctionne la deuxième fois ... alors que pour la première ça ne veut pas ...

Code : Tout sélectionner

fichier.s = "./instant.txt"
Debug FileSize(fichier)

file = OpenFile(#PB_Any,fichier,#PB_File_Append | #PB_File_SharedRead)
If file
    Debug "md5 : " + MD5FileFingerprint(fichier)
EndIf
CloseFile(file)

file = ReadFile(#PB_Any,fichier,)
If file
    Debug "md5 : " + MD5FileFingerprint(fichier)
EndIf
CloseFile(file)
Dernière modification par Naheulf le sam. 11/oct./2014 19:53, modifié 1 fois.
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: Incompréhension entre Openfile ReadFile et MD5FileFinger

Message par majikeyric »

Bein déjà y a pas besoin d'ouvrir un fichier avec OpenFile() ou ReadFile() pour appeler la fonction MD5FileFingerprint().
Avatar de l’utilisateur
Naheulf
Messages : 193
Inscription : dim. 10/mars/2013 22:22
Localisation : France

Re: Incompréhension entre Openfile ReadFile et MD5FileFinger

Message par Naheulf »

En fait c'est par ce que dans mon code je me suis retrouvé à un moment à vouloir utiliser MD5FileFingerprint() sur un fichier que j'avais ouvert par ailleurs dans mon code. Et c'est en testant que je me suis rendu compte de ce comportement.

Ce code est juste un résumé de ce que j'ai expérimenté.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Incompréhension entre Openfile ReadFile et MD5FileFinger

Message par nico »

La fonction ne semble pas fonctionner lorsque le fichier est déjà ouvert par le programme en accès écriture, peut être un problème de gestion interne à PB, faudrait voir avec Fred si c'est normal.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Incompréhension entre Openfile ReadFile et MD5FileFinger

Message par Ar-S »

Extrait de la doc
Pour que l'ouverture du fichier avec OpenFile() soit un succès, le fichier doit avoir les droits en lecture et écriture. Ceci peut devenir un problème si il faut manipuler des fichiers sur un CD-Rom par exemple. Dans ce cas, il convient d'utiliser ReadFile() quand seule la lecture du fichier est nécessaire.
Théorie.
Je pense donc que lorsqu'on utilise OpenFile le fichier doit être considéré comme "en cours d'utilisation" et pas avec readfile().

D'ailleurs je le démontre ici : (re-modifie ton chemin ligne 1)

Code : Tout sélectionner

fichier.s = "E:\MULTIMEDIA\PUREBASIC\5.30\test_list.pb"
Taille =  FileSize(fichier)
OK = 0

file = OpenFile(#PB_Any,fichier,#PB_File_Append | #PB_File_SharedRead)
If file <> 0 And Taille > 0
    OK=1
    Else
    OK = 0
EndIf
CloseFile(file)

; Comme mon fichier est fermé, la commande MD5 va marcher.
If OK = 1
	Debug "Version OPENFILE - md5 : " + MD5FileFingerprint(fichier)

file = ReadFile(#PB_Any,fichier)
Debug "Version READFILE - md5 : " + MD5FileFingerprint(fichier)
CloseFile(file)
	
EndIf
Mais comme l'a dit majikeyric, MD5FileFingerprint se suffit à lui même. ça évite justement plusieurs accès à un fichier déjà "ouvert".
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Incompréhension entre Openfile ReadFile et MD5FileFinger

Message par nico »

Après quelques tests, voici l'explication:

La fonction MD5FileFingerprint ouvre le fichier spécifié avec l'argument FILE_SHARE_READ mais pas avec l'argument FILE_SHARE_WRITE, ceci expliquant les tests précédents, ce qui signifie aussi que si le fichier est ouvert par un autre processus en écriture, la fonction échouera.

Extrait doc MSDN:
FILE_SHARE_WRITE
0x00000002
Permet les opérations d'ouverture suivantes sur un fichier ou un dispositif de demande d'accès en écriture.
Sinon, d'autres processus ne peuvent pas ouvrir le fichier ou périphérique s'ils demandent un accès en écriture.
Si cette option n'est pas spécifiée, mais le fichier ou le dispositif a été ouvert pour un accès en écriture ou a un mappage de fichiers avec un accès en écriture, la fonction échoue.
Avatar de l’utilisateur
Naheulf
Messages : 193
Inscription : dim. 10/mars/2013 22:22
Localisation : France

Re: Incompréhension entre Openfile ReadFile et MD5FileFinger

Message par Naheulf »

D'accord .... bon et ben merci :D je met le topic en résolu

Edit : on fait comment pour passer un topic en résolu ?
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Incompréhension entre Openfile ReadFile et MD5FileFinger

Message par Ar-S »

Tu édites ton premier message et tu ajoutes [RESOLU] ou [OK] devant ton titre.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre