Open et les caractères accentués [Résolu]

cs_kroman 53 Messages postés samedi 1 février 2003Date d'inscription 6 août 2009 Dernière intervention - 3 sept. 2006 à 18:55 - Dernière réponse : cs_kroman 53 Messages postés samedi 1 février 2003Date d'inscription 6 août 2009 Dernière intervention
- 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?
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 4 sept. 2006 à 07:49
3
Merci
tu peux utiliser les APIs de lecture de fichier... CreateFile, etc

Renfield
Admin CodeS-SourceS- MVP Visual Basic

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Renfield
Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 4 sept. 2006 à 07:52
3
Merci
pour la cedille, faire, simplement :


sBuffer = "C:\Hello" & ChrW$(&H15F) & ".txt"


et pour les apis (la version Unicode a utiliser), ne pas passer sBuffer (String) mais un Long :

StrPtr ( sBuffer)


pour éviter que VB ne s'amuse a convertir la chose en ASCII

Renfield
Admin CodeS-SourceS- MVP Visual Basic

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Renfield
cs_kroman 53 Messages postés samedi 1 février 2003Date d'inscription 6 août 2009 Dernière intervention - 3 sept. 2006 à 19:01
0
Merci
ça c'est un comble le caractère en question ne passe pas non plus ici :d
voila une image pour illustrer mes propos :
Commenter la réponse de cs_kroman
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 3 sept. 2006 à 19:32
0
Merci
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
Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 3 sept. 2006 à 19:33
0
Merci
PS : Bien sûr, dans le nom du fichier, remplace le ? par ce S avec cédille
Commenter la réponse de cs_Jack
cs_kroman 53 Messages postés samedi 1 février 2003Date d'inscription 6 août 2009 Dernière intervention - 3 sept. 2006 à 21:15
0
Merci
Bonjour et merci pour ta réponse :)

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

Dans


tout


les cas ci-dessus,



strLocalPath



à toujours le même contenu...







Quelque chose m'échappe...
Commenter la réponse de cs_kroman
cs_kroman 53 Messages postés samedi 1 février 2003Date d'inscription 6 août 2009 Dernière intervention - 5 sept. 2006 à 16:10
0
Merci
ok merci je vais essayé avec ça et je te dis quoi 
Commenter la réponse de cs_kroman
cs_kroman 53 Messages postés samedi 1 février 2003Date d'inscription 6 août 2009 Dernière intervention - 9 sept. 2006 à 13:33
0
Merci
C'est bon merci beaucoup ça marche niquel ;)

Juste une dernière question à propos des APIs de lecture de fichiers : sais-tu comment utiliser l'api SetFilePointer avec des fichiers > 4gb ?

http://www.allapi.net/apilist/SetFilePointer.shtml

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)
Commenter la réponse de cs_kroman
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 9 sept. 2006 à 14:17
0
Merci
tu peux simplement appeler cette fonction plusieurs fois ^^

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
cs_kroman 53 Messages postés samedi 1 février 2003Date d'inscription 6 août 2009 Dernière intervention - 9 sept. 2006 à 20:56
0
Merci
C'est sûr mais c'est pas terrible :d

Le problème c'est que je vois mal comment appeler l'api avec pour

lpDistanceToMoveHigh

une valeur de 7 milliards (par ex) sur une variable de type long limité à 4 milliards et quelque.
Commenter la réponse de cs_kroman
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 9 sept. 2006 à 22:56
0
Merci
je viens de regarder la doc...

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/setfilepointer.asp


tu as deux Long a ta disposition, soit 64 bits, soient quelques

18 446 744 073 709 551 616


ca devrait pourtant suffir !


7 000 000 000 => &h1A13B8600


lDistancetomove =>  &hA13B8600&

lpDistanceToMoveHigh =>  adresse de &h1&

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
cs_kroman 53 Messages postés samedi 1 février 2003Date d'inscription 6 août 2009 Dernière intervention - 13 sept. 2006 à 00:43
0
Merci
Merci du coup de main ça marche impec
Commenter la réponse de cs_kroman

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.