Archives pour: Janvier 2009, 21
Comment trouver le dossier d’une carte d’extension ?
Janvier 21st, 2009Il est possible d’utiliser avec les Pocket PC et les Smartphones des cartes d’extension permettant d’ajouter de l’espace de stockage. C’est très pratique car vous pouvez insérer ou retirer une carte à chaud (hot plug).
Depuis que la plupart des machines du marché proposent en standard cette possibilité il devient important de pouvoir en tirer partie au maximum. Si vous, développeurs, vous devez prendre en compte cet espace de stockage vous devez pouvoir l’identifier par programme à coup sûr, et là les problèmes commencent.
Sous Windows Mobile, il n’y a pas de lettre de lecteur comme sous DOS ou Windows PC. Le système de stockage est unifié même si physiquement il est composé de plusieurs éléments comme la RAM, la ROM, ou une carte d’extension. Lorsque vous insérez une carte mémoire dans votre appareil sa racine est vue comme un dossier supplémentaire qui est placé à la racine même du système de fichier. Ce dossier s’appelle un volume et son icône est légèrement différente de celle des dossiers classiques.
Le problème est que sur nos machines françaises le volume va s’appeler par exemple “Carte de Stockage” alors que sur un Pocket PC US il va s’appeler “Storage Card". Alors comment les reconnaître ?
Tous les dossiers correspondants à un volume d’extension possèdent un attribut “Dossier” (ce qui est normal) et aussi un attribut “Temporaire” qui indique la nature exacte du dossier. Il faut appuyer les recherches sur cette information. Pour partir à la recherche d’un dossier correspondant à un volume d’extension il faut scanner les dossiers à la racine du système de fichiers.
Nous allons utiliser les services de l’espace de nom System.IO pour lister les dossiers présents à la racine du système de fichier et déterminer ceux qui ont l’attribut “Temporaire” actif :
Private Function ListerVolumes() As List(Of String)
Dim wListe As New List(Of String)
Dim wDossiers() As String
Dim wDossierInfo As System.IO.DirectoryInfo
Dim wDossier As String
Dim wAttribut As Boolean
REM On récupère les dossiers sous la racine
wDossiers() = System.IO.Directory.GetDirectories("\")
REM On ne garde que les dossiers amovibles
For Each wDossier In wDossiers
wDossierInfo = _
New System.IO.DirectoryInfo(wDossier)
wAttribut = _
wDossierInfo.Attributes _
And _
IO.FileAttributes.Temporary
If wAttribut Then wListe.Add(wDossier)
Next
Return wListe
End Function
Cette fonction retourne une liste typée contenant tous les dossiers amovibles présents sous la racine.