Isfileemptybinaryortextonly --- anciennement nommé isbinaryfile est ce qu un fichier est binaire ou texte?

Soyez le premier à donner votre avis sur cette source.

Vue 2 806 fois - Téléchargée 318 fois

Description

MERCI a ceux qui ont commenté ma source et permis de l'améliorer.

En résumé:

-Tout fichier est en principe binaire
-ce qu'on appelle fichiers textes sont des fichiers binaires ne contentnat normalement pas de Chr(0)
(suite à des tests, j'ai vu que Winmerge.exe et UltraEdit.exe fonctionnent sur ce principe par rapport à ce sujet,
ils montrent binaire si Chr(0) trouvé dans le fichier chargé.
-Un fichier peut ètre vide et n'ètre donc ni binaire ni texte ou les deux
-Lors de l'ouverture du fichier, il peut survenir une erreur (si par exemple pas de permission d'accès)

La fonction isFileEmptyBinaryOrTextOnly renvoie donc 4 valeurs possibles de retour:

Public Enum isFileEmptyBinaryOrTextOnlyEnum 'Valeurs de retour possibles
FileEmpty = 1
FileBinary = 2
FileTextOnly = 3
FileCouldNotOpen = 4 'happens if File does not exist or the user has not the right to open the file, etc.
'ErrMsg returns "Access denied" or something like this
End Enum

Le module met a disposition 2 fonctions

Public Function isFileEmptyBinaryOrTextOnly(FilePath As String, _
Optional ByRef ErrMsg As String, _
Optional ByRef NulCharFoundAtPos As Long, _
Optional ByVal maxByteReadForSearchOfChr0_DefaultValue255Kb As Long = 261120) As isFileEmptyBinaryOrTextOnlyEnum

Public Function ReturnValueToStringOfIsFileEmptyBinaryOrTextOnly(val As isFileEmptyBinaryOrTextOnlyEnum, _
Optional ByRef ErrMsg As String = "") As String

Vous pouvey librement utiliser ce module dans votre application. Il vous faudra pour cela juste implementer localement dans votre projet la fonction FileExists, tres facile. (dasn le projet de test fourni, c'est implémenté au travers de FileSzstemObject.FileExists)

'Utilisation externe, exemple:
dim ErrMsg as String
Select Case isFileEmptyBinaryOrTextOnly(FilePath, ErrMsg )
Case FileEmpty
'DoWhatYouWant
Case FileBinary
'DoWhatYouWant
Case FileTextOnly
'DoWhatYouWant
Case FileCouldNotOpen
'MsgBox ErrMsg
End Select

Le projet de testé

Il permet d'ouvrir un fichier et tester le résultat en bleu a l écran, de scanner un repértoire et enregistrer le résultat en .txt separé par des Tabulations, importer ce fichier dans Excel (si excel est installé) et de mettre le bon format de date puis, si Access est installé, importer le fichier excel dans le fichier .mdb fourni avec le projet (ou dans tout fichier .mdb du même nom que l'exe). Ce fichier .mdb fait les sql pour trier et regarder le résultat agréablement.

Source / Exemple :


ClsWinVersion.cls                    'pour la fonction StartFile
Explications.gif                     'pour montrer le prog de test
FileEmptyBinaryOrTextOnly.mdb        'pour analyser les résultats de test
FileEmptyBinaryOrTextOnly.vbp        'le projet
getFileByFileDialogM.bas             'pour GUI
isFileEmptyBinaryOrTextOnlyForm.frm  'pour GUI
isFileEmptyBinaryOrTextOnlyM.bas    '-LA FONCTION sujette de cette source
ShellLink.cls                        'pour résoudre un raccourcis, pour la fonction StartFile
ShellLink.tlb                        'trouvé sur internet, écrit en c, pour ShellLink.cls
StartFileM.bas                       'pour starter un fichier, utilise cmd start du shell pour montrer un fichier par le programme par défaut

Conclusion :


Ajoutez isFileEmptyBinaryOrTextOnlyM.bas dans votre projet si vous avez besoin d une telle fonction. Elle a ete testee sur tous les fichiers de mon disque dur.

LIMITATION
Mon scan de Data me retourne un fichier texte de 88440 lignes correspondant é des fichiers. L'importation dans Excel s'arrete aprés 56549 lignes.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
cs_ghuysmans99
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
16
12 août 2009 à 19:09
Beau code, commenté et compréhensible (10/10).
Ton idée d'utiliser Access pour analyser les résultats est très bonne !
philholl
Messages postés
2
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
12 août 2009

12 août 2009 à 13:16
Merci les gars pour vos commentaires.

ghuysmans99, tu m'as donné de bons conseils.

Maintenant ma source a été adaptée, je pense que cela représente mieux les différents états possibles pour ces fichiers, textes ou binaires.

Merci de remettre vos commentaires si vous utilisez ou si vous avez déjà commenté et trouvez que c'est mieux maintenant.

Philippe l'auteur de la source
cs_Cheval
Messages postés
81
Date d'inscription
dimanche 21 juillet 2002
Statut
Membre
Dernière intervention
11 octobre 2015

11 août 2009 à 09:29
J'ai testé et que le fichier soit un exe ou un txt j'ai toujour la réponse FAUX
cs_ghuysmans99
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
16
8 août 2009 à 22:51
Les .sys ne sont pas des fichiers texte !
Ils contiennent des drivers (DOS ou Windows).
Ce que tu peux faire alors c'est retourner :
- 0 si ce n'est pas un fichier binaire
- 1 si c'en est un
- 2 si le fichier est inconnu (un fichier vide peut être binaire ou non)
philholl
Messages postés
2
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
12 août 2009

8 août 2009 à 11:57
Merci les gars pour vos commentaires, vous me permettez d ameliorer le code en question. Je vais poster maintenant les nouvelles sources.
Philippe
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.