OVH Cloud OVH Cloud

GetOpenFileName (encore !)

18 réponses
Avatar
scraper
bonsoir à tous !

j'utilise dans un projet GetOpenFileName avec comme flags
OFN_EXPLORER Or OFN_ALLOWMULTISELECT notamment

ceci afin d'avoir une fenêtre type "explorateur" et la multisélection de
fichiers ...

le problème est que lorsque je sélectionne plusieurs fichiers, le résultat
est de la forme

"strRepertoire" "strFichier1" "srtFichier2" etc ....

et je n'arrive pas à retrouver, à partir de ces infos, le chemin complet du
répertoire ?

j'ai bien spécifié le répertoire initial, mais en cas de changement, comment
retrouver le répertoire sélectionné ?

merci à tous par avance



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper

10 réponses

1 2
Avatar
Jean-Marc
C'est un vrai problème intéressant. Voici un essai amusant:
1/ créer un répertoire tmp
2/ Dans tmp, créer un répertoire "a" et un répertoire "a b"
3/ dans tmpa, créer 3 fichiers:
"b",
"c"
"Nouveau Document texte.txt"
4/ dans tmp"a b", créer 2 fichiers:
"c"
"Nouveau Document texte.txt"


A) puis avec le GetOpenFileName, sélectionner dans "tmpa" les 3 fichiers

Au retour de GetOpenFileName, on a:
? ofname.lpstrFile
C:tmpa b c Nouveau Document texte.txt

B) puis avec le GetOpenFileName, sélectionner dans "tmpa b" les 2 fichiers

Au retour de GetOpenFileName, on a:
? ofname.lpstrFile
C:tmpa b c Nouveau Document texte.txt

C'est identique, au caractère prés, même en regardant la chaîne en hexa
caractère par caractère.
Pourtant, on a bien fait 2 sélections différentes.

Je ne vois pas du tout comment faire, puisque le résultat produit est le
même,
pour 2 sélections différentes....

Ca c'est une vraie colle.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
"scraper" a écrit dans le message de
news:
bonsoir à tous !

j'utilise dans un projet GetOpenFileName avec comme flags
OFN_EXPLORER Or OFN_ALLOWMULTISELECT notamment

ceci afin d'avoir une fenêtre type "explorateur" et la multisélection de
fichiers ...

le problème est que lorsque je sélectionne plusieurs fichiers, le résultat
est de la forme

"strRepertoire" "strFichier1" "srtFichier2" etc ....

et je n'arrive pas à retrouver, à partir de ces infos, le chemin complet


du
répertoire ?

j'ai bien spécifié le répertoire initial, mais en cas de changement,


comment
retrouver le répertoire sélectionné ?

merci à tous par avance



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper




Avatar
scraper
Bonjour Jean-Marc
(dans news:4165af3a$0$10417$)
tu nous disais :

C'est un vrai problème intéressant. Voici un essai amusant:



[...]


oui, je comprends tout à fait ce que ça produit ....

effectivement, c'est troublant !

heureusement que dans la vraie vie, y'a les extensions de fichiers, ça peut
nous tirer d'affaire ! :-)

mais il est vrai que si dans la chaine de retour, le répertoire était séparé
des fichiers, dans le cas d'une multisélection, ce serait mieux !

mais tout ça me dit pas comment récupérer le chemin complet de a ... ou a b
? :-)

merci de t'être penché sur le problème, en tout cas


--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
Alain CROS
Bonjour.

Peut être ça ?

If the user selects more than one file, the lpstrFile buffer returns the path to the current directory followed by the filenames of
the selected files. The nFileOffset member is the offset to the first filename, and the nFileExtension member is not used.

Alain CROS

"Jean-Marc" a écrit dans le message de news: 4165af3a$0$10417$
C'est un vrai problème intéressant. Voici un essai amusant:
1/ créer un répertoire tmp
2/ Dans tmp, créer un répertoire "a" et un répertoire "a b"
3/ dans tmpa, créer 3 fichiers:
"b",
"c"
"Nouveau Document texte.txt"
4/ dans tmp"a b", créer 2 fichiers:
"c"
"Nouveau Document texte.txt"


A) puis avec le GetOpenFileName, sélectionner dans "tmpa" les 3 fichiers

Au retour de GetOpenFileName, on a:
? ofname.lpstrFile
C:tmpa b c Nouveau Document texte.txt

B) puis avec le GetOpenFileName, sélectionner dans "tmpa b" les 2 fichiers

Au retour de GetOpenFileName, on a:
? ofname.lpstrFile
C:tmpa b c Nouveau Document texte.txt

C'est identique, au caractère prés, même en regardant la chaîne en hexa
caractère par caractère.
Pourtant, on a bien fait 2 sélections différentes.

Je ne vois pas du tout comment faire, puisque le résultat produit est le
même,
pour 2 sélections différentes....

Ca c'est une vraie colle.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
"scraper" a écrit dans le message de
news:
> bonsoir à tous !
>
> j'utilise dans un projet GetOpenFileName avec comme flags
> OFN_EXPLORER Or OFN_ALLOWMULTISELECT notamment
>
> ceci afin d'avoir une fenêtre type "explorateur" et la multisélection de
> fichiers ...
>
> le problème est que lorsque je sélectionne plusieurs fichiers, le résultat
> est de la forme
>
> "strRepertoire" "strFichier1" "srtFichier2" etc ....
>
> et je n'arrive pas à retrouver, à partir de ces infos, le chemin complet
du
> répertoire ?
>
> j'ai bien spécifié le répertoire initial, mais en cas de changement,
comment
> retrouver le répertoire sélectionné ?
>
> merci à tous par avance
>
>
>
> --
>
> Attention ! Adresse mail invalide ...
> Pour me contacter, cliquez sur le lien ci-dessous:
> http://scraper.chez.tiscali.fr/contact.htm
>
> scraper
>
>




Avatar
scraper
Bonjour Alain CROS
(dans news:)
tu nous disais :

Bonjour.

Peut être ça ?

If the user selects more than one file, the lpstrFile buffer returns
the path to the current directory followed by the filenames of the
selected files. The nFileOffset member is the offset to the first
filename, and the nFileExtension member is not used.



oui, j'ai vu ça , et justement ....

la première partie, je comprends :
le répertoire courant, suivi par les noms de fichiers, c'est plein pile mon
problème, et j'arrive pas à me dépatouiller de ça ...

pour la 2° partie, j'avoue que je comprends guère ....
nFileOffset est l'offset du premier fichier (sans extension) ....bon .... ??

c'est quoi un offset ? :-(

et vais je arriver à extraire le chemin complet de ça ?

pardon, mais là, je suis un peu largué

merci encore de ton aide



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
Jean-Marc
"Alain CROS" a écrit dans le message de
news:
Bonjour.

Peut être ça ?

If the user selects more than one file, the lpstrFile buffer returns the


path to the current directory followed by the filenames of
the selected files. The nFileOffset member is the offset to the first


filename, and the nFileExtension member is not used.

Alain CROS



Hello,

Arg, honte sur moi, je n'avais pas vu ce membre de la structure!

Merci Alain !!

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Avatar
Alain CROS
Bonjour.

L'offset, c'est le décalage entre le début de la chaîne et le début du premier nom de fichier donc la position à laquelle commence
le premier nom de fichier.
La suite signifie que dans ce cas là, le paramètre nFileExtension de la structure OpenFileName n'est pas utilisée.

Exemple :
La fonction renvoie la chaîne "C:tmpa b c Nouveau Document texte.txt"
Si nFileOffset = 10 --> le répertoire est C:tmpa puisque le premier nom de fichier commence au caractère n°10.
Si nFileOffset = 12 --> le répertoire est C:tmpa b puisque le premier nom de fichier commence au caractère n°12

Alain CROS

"scraper" a écrit dans le message de news:
Bonjour Alain CROS
(dans news:)
tu nous disais :

> Bonjour.
>
> Peut être ça ?
>
> If the user selects more than one file, the lpstrFile buffer returns
> the path to the current directory followed by the filenames of the
> selected files. The nFileOffset member is the offset to the first
> filename, and the nFileExtension member is not used.

oui, j'ai vu ça , et justement ....

la première partie, je comprends :
le répertoire courant, suivi par les noms de fichiers, c'est plein pile mon
problème, et j'arrive pas à me dépatouiller de ça ...

pour la 2° partie, j'avoue que je comprends guère ....
nFileOffset est l'offset du premier fichier (sans extension) ....bon .... ??

c'est quoi un offset ? :-(

et vais je arriver à extraire le chemin complet de ça ?

pardon, mais là, je suis un peu largué

merci encore de ton aide



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper




Avatar
scraper
Bonjour Alain CROS
(dans news:)
tu nous disais :

Bonjour.

L'offset, c'est le décalage entre le début de la chaîne et le début
du premier nom de fichier donc la position à laquelle commence le
premier nom de fichier.
La suite signifie que dans ce cas là, le paramètre nFileExtension de
la structure OpenFileName n'est pas utilisée.

Exemple :
La fonction renvoie la chaîne "C:tmpa b c Nouveau Document
texte.txt"
Si nFileOffset = 10 --> le répertoire est C:tmpa puisque le premier
nom de fichier commence au caractère n°10.
Si nFileOffset = 12 --> le répertoire est C:tmpa b puisque le
premier nom de fichier commence au caractère n°12



hello !

merci de ta réponse !

en effet, je commence à comprendre un peu mieux ! :-)
(rien de tel qu'un exemple !)

ce qui me permet de voir que ça fonctionnera pas ! :-(
en effet, la chaine ne me renvoie pas C:tempa b, pour reprendre ton
exemple, mais renverrait dans ce cas a b ??

d'où ma question initiale : comment récupérer le chemin d'accès complet au
répertoire sélectionné ? :-)

merci de ton aide


--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
Jean-Marc
"scraper" a écrit dans le message de
news:%

en effet, je commence à comprendre un peu mieux ! :-)
(rien de tel qu'un exemple !)

ce qui me permet de voir que ça fonctionnera pas ! :-(
en effet, la chaine ne me renvoie pas C:tempa b, pour reprendre ton
exemple, mais renverrait dans ce cas a b ??

d'où ma question initiale : comment récupérer le chemin d'accès complet au
répertoire sélectionné ? :-)





Hello,

Comme ceci:
Exemple
? ofname.lpstrFile
C:tmpa bNouveau Document texte.txt

je cherche le répertoire:

dim repertoire as string

repertoire = mid$(ofname.lpstrFile, 1, ofname.nFileOffset - 1)

repertoire vaut:
C:tmpa b

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Avatar
scraper
Bonjour Jean-Marc
(dans news:416658b9$0$22097$)
tu nous disais :

Hello,



Re !

Comme ceci:
Exemple
? ofname.lpstrFile
C:tmpa bNouveau Document texte.txt

je cherche le répertoire:

dim repertoire as string

repertoire = mid$(ofname.lpstrFile, 1, ofname.nFileOffset - 1)

repertoire vaut:
C:tmpa b



OK, ça fonctionne .... maintenant ! :-)

parce que comme ça marchait tjs pas, je me suis replongé dans mon code ....
et .... honte à moi !

j'avais créé une ligne qui me modifiait le contenu de OFName.lpstrFile !!!

je suis vraiment confus ... :-(

en fait, en ayant corrigé le code, le chemin d'accès complet apparait bien
dès le départ, comme Alain et toi me le disiez ...

La fonction renvoie la chaîne "C:tmpa b c Nouveau Document texte.txt"







et donc, un simple traitement du contenu de OFName.lpstrFile, et hop,
effectivement je récupère le path complet !

super ! :-)

merci encore à vous deux, et .... encore désolé pour cette erreur ! :-)



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
scraper
Bonjour Jean-Marc
(dans news:416658b9$0$22097$)
tu nous disais :

Comme ceci:



[...]

me revoila :-)

avec un autre problème, mais toujours sur GetOpenFileName

donc, la soluce exposée ici fonctionne, mais par curiosité, j'ai essayé de
détourner les conseils de François, dans un autre fil plus bas, sur la
valeur de certains membres de OFName ...

donc, il m'a conseillé :

Il te suffit de remplacer
.lpstrFile = Space$(254)
.nMaxFile = 255
(ces lignes sont incorrectes pour d'autres raisons)
par une valeur plus grande (sous NT 4, la limite est de 32768) :
.nMaxFile = 32767
.lpstrFile = String$(.nMaxFile, vbNullChar)



ce qui fonctionne parfaitement ....

mais j'ai lu sur le net que si la taille du buffer était trop petite, on
pouvait récupérer la valeur de CommDlgExtendedError()
qui doit alors être à FNERR_BUFFERTOOSMALL ...

j'ai donc essayé ?? en mettant une taille plus petite
mais ça fonctionne pas chez moi ?? j'ai toujours une valeur de retour =0
pour CommDlgExtendedError

j'ai ausis lu qu'il fallait subclasser la fenêtre parent (c'est ça ? :-)
pour intercepter le message ....
j'ai mis en place un hook ... qui doit fonctionner, puisque j'arrive par ce
hook à changer le titre de la fenêtre GetOpenFileName
mais je ne sais pas comment intercepter le message d'erreur pour buffer trop
petit ??

c'est pas que ce soit vraiment vital; mais j'ai merais bien comprendre ?
:-)

merci d'avance


--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
1 2