Ouvrir fichier en binaire SANS "Open file For Binary"

Résolu
Munkyubi Messages postés 16 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 23 mars 2010 - 23 janv. 2009 à 16:12
Munkyubi Messages postés 16 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 23 mars 2010 - 23 janv. 2009 à 16:55
Bonjour tout le monde,

Bon alors voilà mon problème est de savoir si en VB6 il existe une méthode pour ouvrir un fichier en Binaire sans utiliser le basique Open file For Binary.

Pourquoi cette demande ? En fait je suis en train de préparer un module d'upload de fichiers automatisé avec winsock. Les fichiers que j'ai à uploader sont des fichiers excel (.xls donc) et comme vous savez, il faut mettre le code du fichier en binaire dans la requête HTTP POST.

Le problème c'est que les fichiers excels étant assez "larges", la récupération du code binaire par un Open ... For Binary met en moyenne 40 secondes par fichier...(ce qui n'est pas viable puisque l'upload concerne entre 200 et 300 fichiers environ certains plus ou moins gros).

Toutes les solutions alternatives que je trouve sont en VB.Net... v_v

Merci d'avance si quelqu'un a une idée

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 janv. 2009 à 16:40
Re
Par précaution, je te conseille d'ajouter "Access Read" dans ta commande Open.
Tu ouvres un fichier en mode Binaire et tu lis du texte ?
Non, il faut lire des tableaux de Bytes (1 Byte = code ascii d'un Char)
A quoi correspond "str" ?
Pourquoi lire 15 octets à la fois si c'est pour les ajouter à une autre variable sans limite ?
Si tu dois tout lire, dimensionne "line" avec la taille du fichier (FileLenB) : Tu liras tout d'un coup (en mémoire !), tu gagneras du temps.

Tu peux essayer ça, si tu ne veux pas passer par les Bytes : (de mémoire)
   Dim Line As String
   str = ""
   f = FreeFile
   Open fPath For Binary Access Read As #f
   Line = String(FileLenB(fPath), 0)
   While Not EOF(f)
       Get #f, , line
       str = str & line
   Wend
   Close #f

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 janv. 2009 à 16:24
Salut
Le problème ne vient pas du Open mais de la manière avec laquelle tu lis les données.
Il faut adapter/optimiser la taille du buffer de lecture à la taille du buffer utilisé pour tes paquets de POST.
Comment pratiques-tu ?
Copie/Colle le code de lecture, il y a peut-être des lenteurs à corriger.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 janv. 2009 à 16:25
"mettre le code du fichier en binaire" : Avec des 0 et des 1 ???
Qu'appelles-tu binaire ?
0
Munkyubi Messages postés 16 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 23 mars 2010
23 janv. 2009 à 16:30
Hmm pour le moment le code pour ouvrir le fichier est :

    Dim f As Integer
    Dim str As String
    Dim line As String * 15
    str = ""
    f = FreeFile
   
    Open fPath For Binary As #f Len = Len(line)
    While Not EOF(f)
        Get #f, , line
        str = str & line
    Wend
    Close #f
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Munkyubi Messages postés 16 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 23 mars 2010
23 janv. 2009 à 16:55
Hmmm en effet le str ne sert à rien il suffit de tout récupérer en un Get '^^
(Enfin j'avais trouvé une façon alternative mais elle tenait plus du bricolage qu'autre chose lol).

En tout cas maintenant c'est instantané maintenant (str supprimé et boucle de même).

Merci beaucoup ! (pas vraiment l'habitude d'ouvrir des fichiers en binaire '^^)
0
Rejoignez-nous