Nous avons utilisé le code habituel pour lire un fichier complet dans une chaîne pour ensuite analyser en VB6. Les fichiers sont des textes ANSI mais encodés en utilisant n'importe quelle page de code dans laquelle se trouvait l'utilisateur à la fois (nous avons des utilisateurs chinois et anglais par exemple). Voici le codeInputB vs. Get; pages de codes; lecture lente sur le serveur unix
Open FileName For Binary As nFileUnit
sContents = StrConv(InputB(LOF(nFileUnit), nFileUnit), vbUnicode)
Cependant, nous avons découvert c'est la lecture très lent d'un fichier à partir d'un serveur exécutant unix/linux, en particulier lorsque la propriété du fichier est pas le même que le processus de faire la lecture.
J'ai réécrit ce qui précède en utilisant Get et découvert qu'il est beaucoup plus rapide et ne souffre pas de problèmes avec la propriété du fichier. J'apprécie que cela puisse être résolu en reconfigurant le serveur d'une manière ou d'une autre, mais je pense que depuis la désouverture même sans ce problème, la méthode Get est toujours beaucoup plus rapide que InputB que je voudrais remplacer mon code existant en utilisant Get.
Je me demande si quelqu'un pourrait me dire si cela va vraiment faire la même chose. En particulier, fait-il correctement la conversion ANSI à Unicode et sera-t-il toujours vrai. Mon test indique le code de remplacement suivant fait la même chose mais plus rapide:
Open FileName For Binary As nFileUnit
sContents = String(LOF(nFileUnit), " ")
Get #nFileUnit, , sContents
Je me rends compte aussi que je pourrais utiliser un tableau d'octets, mais encore une fois mes tests suggèrent ce qui précède est plus simple et fonctionne. Donc, comment fonctionne le tampon (si vous croyez que l'aide en ligne de Get it parle de caractères - cela causerait des problèmes lors de la lecture dans un fichier ANSI écrit sur la page de code chinoise avec des caractères chinois de 2 octets).
Ce qui suit pourrait intéresser becuase l'approche InputB est généralement donnée comme méthode pour lire un dossier complet, mais il est beaucoup plus lent, des exemples
lecture du fichier 380KB à travers le réseau à partir du serveur unix
InputB (fichier appartenant) = 0,875 sec
InputB (non propriété) = 72,8 sec
Get (soit) = 0,0156 sec
Lecture d'un fichier 9Mb à travers le réseau à partir du serveur unix
InputB (fichier appartenant) = 19,65 sec
Get (soit) = 0,42 sec
Merci Jonathan
Salut Bob, Merci pour votre réponse. Je pensais que poster des heures pourrait être utile pour quiconque vérifie le fil - j'ai été très surpris de voir à quel point il était lent. Je ne suis toujours pas sûr pourquoi la chose de propriété de dossier cause des retards encore plus grands, mais espérant déplacer le code à la version de "Get" (ceci est dans VB6). La seule préoccupation que j'avais était de savoir si l'utilisation de la chaîne en tant que tampon plutôt qu'un tableau d'octets était bonne ou mauvaise - des pensées? Bravo J – user373439
Pour les informations à tous ceux qui lisent le fil: La méthode de la matrice d'octets est recommandée au Chapitre 16 du Guide du programmeur VB6 (p.783) pour lire un fichier contenant des caractères DBCS. L'informatique pourrait être implémentée comme suit (et ceci ne ferait évidemment pas de conversion ANSI-à-Unicode, juste en vous donnant les octets de fichier tels qu'ils ont été lus). Dim bytFile() As Byte Ouvrir Pour FileName Binary nFileUnit ReDim bytFile (1 à LOF (nFileUnit)) Get #nFileUnit,, bytFile – user373439
Il convient de noter que Windows 7 SP1 (et Windows 2008 R2) interrompt la compatibilité binaire de MDAC ADODB. Si vous compilez sur ces systèmes d'exploitation, l'application ne fonctionnera pas sur les autres systèmes d'exploitation Windows. (Et vice-versa.) Windows 8 Preview a une solution en place. – midspace