Problème App.path

djcool74 Messages postés 44 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 12 février 2005 - 6 sept. 2003 à 19:05
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010 - 9 janv. 2004 à 01:08
Bonjour à tous :-)

Voila, j'ai un problème très bizarre. Je fais un prog qui contient une ressource, depuis celle-ci, il extrait un fichier "rmiles.mid" dans le répertoire du prog en cours. Voici le morceau du code :

===================================

Private Sub Form_Load()

Dim BDATA() As Byte
Dim FichierMidi As String
Dim nomfichier As String
Dim nom As String

Text1.Text = App.Path & "\rmiles.mid"
'Nom du repertoire ds laquel on va copier le son
nomfichier = Text1.Text

nbr = FreeFile

Open nomfichier For Binary As #nbr

'Caractéristiques et nom du son inclu dans le programme
BDATA = LoadResData(101, "CUSTOM")
Put #nbr, , BDATA
Close #nbr

' On joue le fichier mid

FichierMidi = Trim(nomfichier)
JouerMusic (FichierMidi)
End Sub

===================================

Mais le problème, c'est que ça merde au niveau de l'adresse pour jouer le fichier qui a été extrait (pourtant, il s'extrait correctement car je le vérifie grace à une textbox, mais impossibilité de le jouer).
Si je mets : nomfichier "C:\rmiles.mid", ça marche, mais si je mets : nomfichier App.path & "rmiles.mid" ça marche pas

Auriez vous une petite idée ?

La misère d'un ami n'est pas plus amusante que le vue d'un jardin dont la flore est mourrante.
djcool74 :-p

http://algonix.site.voila.fr

13 réponses

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
6 sept. 2003 à 19:12
salut

app.path renvoie le chemin de l'app sans "" à la fin du chemin donc il faut mettre :
nomfichier = App.path & "\rmiles.mid"

enfin il n'y a aucun besoins de faire
fichiermidi = trim$(nomfichier)

tu fais direct : JouerMusic nomfichier (sans les parentheses ca ira mieux aussi)

voila

ShareVB
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
6 sept. 2003 à 19:16
resalut

j'oublié : du point de vue optimisationet vitesse d'execution :

remplaces :
Text1.Text = App.Path & "\rmiles.mid"
'Nom du repertoire ds laquel on va copier le son
nomfichier = Text1.Text

par :
nomfichier = App.Path & "\rmiles.mid"
'Nom du repertoire ds laquel on va copier le son
Text1.Text = nomfichier

en effet l'acces à une variable est en théorie plus rapide que l'acces à une propriété

enfin au lieu d'utiliser nbr tu mets 1 (si tu n'a pas d'autres fichiers ouverts) à la place : c pas tres orthodoxe mais ca simplifie le code

revoila

ShareVB
0
djcool74 Messages postés 44 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 12 février 2005
6 sept. 2003 à 19:17
Oui, je sais, je me suis gouré dans le message, je mets :
nomfichier App.path & "\rmiles.mid"> marche pasnomfichier "C:\Windows\System\Bidon\rmiles.mid"> marche.

C'est trop bizarre, c'est pour cela que je demande de l'aide

:-)

La misère d'un ami n'est pas plus amusante que le vue d'un jardin dont la flore est mourrante.
djcool74 :-p
0
djcool74 Messages postés 44 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 12 février 2005
6 sept. 2003 à 19:23
Non, ça ne change rien malheureusement.....

La misère d'un ami n'est pas plus amusante que le vue d'un jardin dont la flore est mourrante.
djcool74 :-p
0

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

Posez votre question
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
6 sept. 2003 à 19:44
Bonsoir

Attention à App.Path
si l'exe est dans C:\Dossier, App.Path renvoie C:\Dossier
mais s'il es dans la racine (C:\), App.Path renvoie C:\

If Right(App.Path, 1) = "" Then
nomfichier = App.path & "rmiles.mid"
Else
nomfichier = App.path & "\rmiles.mid"
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
6 sept. 2003 à 19:45
j'avais bien pensé aussi que c'etait une erreur mais bon on sais jamais :

bon sinon as tu regardé ce que renvoie app.path
ou encore est-ce que le fichier est bien présent dans après extraction dans le dossier de l'app juste apres l'instruction close #nbr
s'il y est, c que le prb vient de ta sub JouerMusic si tu passes le meme chemin à JouerMusic et à Open

voila

ShareVB
0
djcool74 Messages postés 44 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 12 février 2005
7 sept. 2003 à 11:46
Tout est correct, je fichier s'extrait au bon endroit. Si c'est une adresse du type nomfichier=App.path & "\rmiles.mid", il arrive pas à lire, par contre si c'est un truc du genre :
nomfichier="C:\Windows\System\Bidon\rmiles.mid" ça marche.

La procédure, JouerMusic et StopperMusic, je l'ai pris sur un site, mais je ne comprends pas trop ce quelle fait, mais la voici pour + de précisions :

=====================================

Private Declare Function mciSendString Lib "winmm.dll" Alias _
"mciSendStringA" (ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, _
ByVal hwndCallback As Long) As Long
' dans un module BAS

Public Function JouerMusic(ByVal Fichier As String, _
Optional ByVal Alias As Variant) As Boolean
Dim nRet As Long

If IsMissing(Alias) Then Alias = "tune"
Call StopperMusic(Alias)

If mciSendString("open " & Fichier$ & " alias " & Alias, _
vbNullString, 0, 0) = 0 Then

nRet = mciSendString("play " & Alias & " from 0", _
vbNullString, 0, 0)
JouerMusic (nRet 0)

Else
MsgBox "Impossible de jouer la musique"

End If

End Function

Public Sub StopperMusic(Optional ByVal Alias As Variant)

If IsMissing(Alias) Then Alias = "tune"

Call mciSendString("stop " & Alias, vbNullString, 0, 0)
Call mciSendString("close " & Alias, vbNullString, 0, 0)

End Sub

=======================================

Alors ne sais pas, c'est vraiment bizarre.....

La misère d'un ami n'est pas plus amusante que le vue d'un jardin dont la flore est mourrante.
djcool74 :-p

http://algonix.site.voila.fr
0
MoiOlivier Messages postés 172 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 4 août 2005
7 sept. 2003 à 11:56
Salut,
Pour que App.path renvoie le vrais chemin de l'exécutable, il faut que le prog soit compilé. Si tu teste ton prog sans le compiler, App.path renvoie le chemin en cours, donc le chemin renvoyé est celui renvoyé par la fonction CurDir. Tu peux changer le CurDir en utilisant la fonction ChDir (va voir dans l'aide en ligne de VB pour la syntaxe, c'est pas compliqué).

Bonne prog.
A+
0
djcool74 Messages postés 44 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 12 février 2005
7 sept. 2003 à 13:09
Non, cela n'a strictement aucune importance. Pour preuve, va dans l'explorateur d'objet et regarde à App.path, c'est marqué :

"Spécifie le chemin du fichier projet .VBP lorsque l'application est exécutée à partir de l'environnement de développement ou le chemin de l'exécutable lorsque l'application est exécutée comme un fichier exécutable."

Et je l'ai compilé, mais ça ne marche pas quand même.

Par contre, j'ai remarqué un truc bizarre, quand le projet n'es pas compilé, dans la TextBox1, ça me mets le chemin du fichier extrait comme il l'est sur le disque mais quand je compile le prog, il me mets aussi le chemin mais il me mets les répertoires en majuscules

du genre "C:\MES DOCUMENTS\rmiles.mid" quand il est compilé et "C:\Mes Documents\rmiles.mid" quand il n'est pas compilé.

Mais, à mon avis, ça merde au niveau de la procédure
Mais comment ??????,

Car si je mets "C:\Mes Documents\Exemple\rmiles.mid", ça marche et si je mets :

App.path & "\rmiles.mid" ça ne marche pas.

Je ne vois pas en quoi ça gène, car le fichier est bien extrait mais pas joué.

La misère d'un ami n'est pas plus amusante que le vue d'un jardin dont la flore est mourrante.
djcool74 :-p

http://algonix.site.voila.fr
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
7 sept. 2003 à 13:35
salut

alors la je comprends plus : dans jouerMusic tout est correct : on appelle MCI pour jouer le son (il y a d'autres méthodes sur VBFrance.com sans extraction)

sinon mets ca :

Private Sub Form_Load()

Dim BDATA() As Byte
Dim nomfichier As String

nomfichier = App.Path & "\rmiles.mid"
'Nom du repertoire ds laquel on va copier le son
Text1.Text = nomfichier

Open nomfichier For Binary As #1
'Caractéristiques et nom du son inclu dans le programme
BDATA = LoadResData(101, "CUSTOM")
Put #1, , BDATA
Close #1

' On joue le fichier mid

JouerMusic nomfichier
End Sub

si ca marche pas vérifie que le fichier extrait est un fichier son valide...

sinon je vois pas : regardes des sources du site qui font la meme chose

voila

ShareVB
0
djcool74 Messages postés 44 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 12 février 2005
7 sept. 2003 à 13:50
J'ai posté le zip pour que vous compreniez mieux...

J'espère que NIX ne le supprimera pas....

La misère d'un ami n'est pas plus amusante que le vue d'un jardin dont la flore est mourrante.
djcool74 :-p
0
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
9 janv. 2004 à 00:37
as tu essayer de mettre des guillemets ( chr(13) )un peut comme sous dos quan tu veux mettre des nom long
par ex chr (13) & app.path & chr(13) & "monfile" & chr(13)
a la racine de ton c tu na pas un fichier sans ext qui s apel program ou window si c le cas suprimes les (surtout pas les rep mais bien un fichier sans ext et sans icones,LoL)
et ultime test compile le ,met le sur un suport avec les vb6.dll , t ocx et autre depandances et essaye sur un autre PC .
comme ca au moin tu sera fixé
sinon pour info g le mem genre de pb avec tous mes projet lorsque je les fait tourné avec le debuggeur vb6 par contre compilé et dans un autres rep mon app.path marche nickel
c pourquoi je mais systematiquement ds la proc ou j utilise app.path : on error resume next et comme ca en debug il me fait plus chier mais je ne peut tjrs pas utilisé la fonction je ne peut que testé le reste
LoL
:big)
0
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
9 janv. 2004 à 01:08
si ds ton app.path il y a un rep avec un espace c nické il gere ca comme du dos a premiere vue

:big)
0
Rejoignez-nous