none
Vérifier l'existence d'un fichier dans les ressources d'un projet RRS feed

  • Discussion générale

  • Bonjour,

    Je suis amateur débutant en programmation et je bloque sur un problème. Je développe actuellement une petite application en VB qui permet de trouver une vidéo en tapant un terme. Il s'agit de vidéo de LSF.

    Mon problème est le suivant. J'ai stocké mes vidéo dans les ressources du projet. J'utilise le nom de la vidéo pour la chercher.

    Donc je tape le mot recherché dans une TextBox et je récupère le mot pour chercher la vidéo. Le problème, c'est que si la vidéo n'existe pas, j'ai une exception qui me dit :

    "Une exception non gérée du type 'System.ArgumentNullException' s'est produite dans mscorlib.dll Informations supplémentaires : La valeur ne peut pas être null."

    Je voudrais donc savoir s'il y a un moyen de tester l'existence du fichier dans les ressources. Je sais que l'on peut le faire quand on va chercher un fichier directement sur le disque dur.

    Je vous remercie d'avance pour votre aide.

    Ciao

    lundi 13 juin 2016 19:10

Toutes les réponses

  • Pouvez-vous montrer le code générant l'erreur?

    lundi 13 juin 2016 20:10
  • Bonsoir,

    Voici le code. C'est la deuxième ligne qui bloque.

    a = "_01" & TextBox1.Text

     System.IO.File.WriteAllBytes("C:\TEST\" & a & ".avi", My.Resources.ResourceManager.GetObject(a))

    Le problème est que "My.Resources.ResourceManager.GetObject(a) est Null car "a" n'existe pas dans mes ressources.

    Je vous remercie de vous intéresser à mon problème.

    mardi 14 juin 2016 19:19
  • Bonjour PeuxTi,

    Il faut vérifier directement dans l'assemby du projet grâce à la méthode Assembly.GetExecutingAssembly().GetManifestResourceName() :

    Dim resourceNames() As String
     
    ' Function
    Private Function ResourceExists(ByVal resourceName As String) As Boolean
        If resourceNames Is Nothing Then
            resourceNames =  
                Assembly.GetExecutingAssembly().GetManifestResourceNames()
        End If
     
        Return resourceNames.Contains(resourceName)
    End Function

    Ci-dessus une petite fonction qui vérifier qu'une ressource existe dans l'assembly du projet grâce à son nom.

    Cordialement,

    mercredi 15 juin 2016 05:54
  • Puisque vous connaissez quelles ressources existent (c'est dans votre liste de Resources) pourquoi ne pas faire un test sur a au préalable: mettez toutes vos video dans une

    List(of String) = {video1,video2,video3..}

    puis

    If List.Contains(a)=True Then

    WriteAllBytes

    Else

    Message que cela n'existe pas

    EndIf

    mercredi 15 juin 2016 06:39
  • Bonjour,

    Merci pour votre réponse.

    Oui je pourrais effectivement faire cela mais j'ai environ 250 vidéos. C'est un peu laborieux de rentrer le nom de chaque vidéo.

    mercredi 15 juin 2016 08:18
  • Bonjour,

    Merci pour votre réponse. En revanche, étant débutant, je ne sais pas comment utiliser cette fonction. 

    Je pense qu'il faut la copier dans mon programme et appeler cette fonction. Mais je ne sais pas comment l'appeler. Pourriez-vous éclairer mes lanternes ? 

    Merci d'avance.

    mercredi 15 juin 2016 08:20
  • a = "_01" & TextBox1.Text
    
    If ResourceExists(a) Then
        System.IO.File.WriteAllBytes("C:\TEST\" & a & ".avi", My.Resources.ResourceManager.GetObject(a))
    End If
    

    Cordialement,
    mercredi 15 juin 2016 08:29
  • Ok merci.

    C'est exactement ce que j'avais fait mais il me mais une erreur :

    Une exception non gérée du type 'System.NullReferenceException' s'est produite dans Microsoft.VisualBasic.dll

    Sur la ligne de la nouvelle fonction : resourceNames = Assembly.GetExecutingAssembly().GetManifestResourceNames()

    Désolé, je suis nul !

    mercredi 15 juin 2016 09:19
  • Bonjour,

    Assurez-vous que l'action de compilation est définie sur "Ressource incorporé" (Embedded Resource) et que le fichier soit bien inclus dans le projet.

    Cordialement,

    mercredi 15 juin 2016 09:47
  • En fait, le code que j'ai écrit fonctionne seulement si le fichier est bien présent dans les "Resources". Pour tester, j'ai seulement inclut un mot. Le mot maman. Du coup, j'ai la vidéo du signe maman dans mes resources. Quand je tape maman dans ma barre de recherche, tout se passe bien. La vidéo s'affiche.

    En revanche, si je tape "papa", qui n'est pas inclut dans les resources, j'ai le message d'erreur présenté initialement. 

    Avec la fonction que vous m'avez conseillé, lorsque je cherche "maman", j'ai l'erreur annoncée dans le message précédent. Idem avec papa.

    mercredi 15 juin 2016 11:30