Utilisateur anonyme
-
3 sept. 2006 à 18:55
Utilisateur anonyme -
13 sept. 2006 à 00:43
Bonjour,
J'ai l'habitude d'utiliser "open" plutôt que le fso pour accéder aux fichiers mais je me suis aperçu récemment qu'il était impossible d'ouvrir un fichier contenant dans son nom des caractères comme "s," (celui-là est utilisé dans l'alphabet Turc par exemple). Je me suis aussi aperçu que ça faisait buggé pas mal de sources sur vbfrance
Voila ce que je voudrais faire :
Open "c:\test\fichiers.txt" For Binary As #intFilePointer
Existe-t'il une astuce pour y parvenir malgré tout?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 3 sept. 2006 à 19:32
Salut
C'est sûr, le point d'interrogation ? n'est pas autorisé dans un nom de fichier puisqu'il représente un caractère de substitution sous DOS. (et l'étoile * pour le remplacement de plusieurs caractères).
Bizarre.
Je n'ai pas l'expérience de l'influence des langues sur le comportement de VB, mais je pense que c'est un problème de version.
Je pense que les capacités à reconnaitre un nom de fichier ne dépend pas de VB, mais de l'OS (Windows XP ?)
L'orthographe de ces fichiers sont-il correctement interprété par le gestionnaire de fichiers classique (Poste de travail) ? Si un de tes fichiers comporte un de ces S avec une cédille, est-ce qu'il l'affiche bien ? ou il y a t-il un carré blanc à la place (ou autre) ?
Si non, cela confirme que VB n'y est pour rien et que le problème est total sur toute la machine = problème d'installation de l'OS
Si oui, je ne comprends pas trop d'où pourrait venir cette restriction, car (si je ne m'abuse), les String de VB ont un format natif Unicode.
Essaye de séparer le nom du fichier de l'instruction Open :
Dim monFichier As String
monFichier = "c:\test\fichier?.txt"
Open monFichier For Binary As #intFilePointer
et voit si l'erreur arrive sur l'écriture de monFichier ou toujours sur la ligne du Open (supprime un éventuel "On Error Resume Next" de ta procédure, OU dans VB, menu Outils, Options, onglet Général, choisir "Arrêt sur toutes les erreurs")
Quel est le n° et le texte de l'erreur qui apparait ? (pour être sûr que le problème vienne bien de là)
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accro
Vous n’avez pas trouvé la réponse que vous recherchez ?
En fait il s'agit d'un problème avec un serveur web (ma source "http explorer" sur vbfrance) et c'est un problème très étrange. A la récupération d'une requête vers un fichier dont le nom contient ce caractère, je stock le chemin local complet de ce fichier à renvoyer au client dans une variable et je m'apercois que :
- un fso.FileExists(strLocalPath) renvoi true sur ce fichier (jusque la normal).
- un msgbox(strLocalPath) m'affiche le nom du fichier avec le "s" mais sans cédille (caractère 's' normal 73&, bizarre...)
- un msgbox(convToUtf8(strLocalPath)) m'affiche le s avec la cédille convertie en utf8 (c:\test\fichierÅŸ.txt, là normal)
- et enfin (le problème) : un open strLocalPath For Binary As #intFilePointer me créé un fichiers.txt si le fichier d'origine était fichier?.txt. open a donc lui aussi remplacé le s avec cédille par 's' et je me retrouve avec deux fichiers :d
J'ai déjà lu 100 fois mais en pratique ça à pas l'air de marcher et sur le net y'a pas énormément d'exemple avec vb6 :/
J'ai aussi testé ce code trouvé sur un site mais ça fonctionne pas :d
Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
Dim varvalue As Long
Dim varaddr As Long
varvalue = 2 ' assign a value to a variable.
varaddr = VarPtr(Var) ' get the address in memory of the variable.
Call SetFilePointer(FilePointer, 0, varaddr, 0)