none
FAQ: Où et comment sauvegarder les fichiers dans une application? RRS feed

  • Discussion générale

  • Cet article représente une traduction de l’article d'Aaron Margosis et présente la manière correcte d’identifier les chemins de dossiers qu’on utilise pour stocker les fichiers dépend de la technologie de programmation que vous utilisez.

    Les plus communs erreurs qui mènent à des problèmes de compatibilité est la spécification incorrecte des chemins de dossier dans les applications. Par exemple, il n'est pas rare que des programmes de supposer que le profil de l’utilisateur est dans le cadre de « C:\Documents and Settings ». Ces chemins d'accès par défaut sont toujours sujets à changement et ont changé à travers différentes versions de Windows. Profils utilisateur sont stockées sous % SystemDrive%\WINNT\Profiles, puis sous « %SystemDrive%\Documents and Settings » et maintenant sous % SystemDrive%\Users. Le profil de « Tous les utilisateurs » est maintenant appelé « Public », et ce qui était en « %USERPROFILE%\Local Settings\Application Data » est maintenant en « % USERPROFILE%\AppData\Local ».

    Comment peuvent les applications fonctionner correctement ? Il faut suivre quelques règles :

    • Ne pas coder tous les chemins de système de fichier.
    • Ne supposez pas que Windows est installé sur le lecteur C:, qu'il existe un « Documents and Settings » ou un dossier « Utilisateurs » ou un dossier « Program Files ».
    • Utilisez des constantes symboliques et les API Windows, aussi que les variables d'environnement pour identifier l'endroit approprié pour mettre les fichiers.
    • Faites distinction entre chaque utilisateur et le contenu partagé.
    • Faites la distinction entre les fichiers utilisateurs qui devraient être capables de naviguer dans l'explorateur (par exemple, les documents qui créent des utilisateurs) et les fichiers qui ne sont pas destinés à l'accès direct par les utilisateurs (paramètres de configuration application, par exemple). Ces types de fichier doivent être stockés dans des endroits différents.

    Voici la façon correcte d'identifier les emplacements de dossiers pour une variété de technologies de programmation :


    mardi 27 septembre 2011 09:16

Toutes les réponses

  • C++

     

    Utilisez la fonction de SHGetSpecialFolderPath avec des constantes de CSIDL. Pour les programmes conçus pour ne s'exécuter pas que sur Windows Vista ou plus récent, utilisez la fonction de SHGetKnownFolderPath avec des constantes de KNOWNFOLDERID. Consultez les liens suivants :

    Les deux exemples suivants montrent comment récupérer les chemins d'accès pour le dossier Documents de l'utilisateur en cours et le dossier partagé Documents de l'ordinateur :

    HRESULT hr;
    
    TCHAR szPath[MAX_PATH];
    
    hr = SHGetFolderPath(NULL, CSIDL_MYDOCUMENTS, NULL, SHGFP_TYPE_CURRENT, szPath);
    
    if (SUCCEEDED(hr))
    
    {
        ...
    }
    
    hr = SHGetFolderPath(NULL, CSIDL_COMMON_DOCUMENTS, NULL, SHGFP_TYPE_CURRENT, szPath);
    
    if (SUCCEEDED(hr))
    
    {
        ...
    }
    
    mardi 27 septembre 2011 09:18
  • C# /VB.NET (à l'aide de code managé)

     

    Utilisez la méthode Environment.GetFolderPath, en passant dans une énumération Environment.SpecialFolder. La méthode System.IO.Path.Combine peut être utilisée pour combiner les pièces de chemin d'accès. Par exemple, le code C# suivant renvoie le chemin vers un sous-dossier « MyData » dans le dossier Documents de l'utilisateur en cours :

    string sPath; 
    sPath = System.IO.Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "MyData");

     

    Il s'agit du même code mis en œuvre en VB.NET :

    Dim sPath As String 
     sPath = System.IO.Path.Combine( _ Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), _ "MyData")

     

    Références :


    mardi 27 septembre 2011 09:19
  • PowerShell

     

    Windows PowerShell est construite sur .NET et peut invoquer beaucoup des méthodes et ressources .NET à partir de l'interface de ligne de commande PowerShell jusqu’aux fichiers de script éditable avec Notepad. Voici comment implémenter l'exemple antérieur (construction d'un chemin vers un sous-dossier « MyData » du dossier de Documents de l'utilisateur en cours) à l'aide de PowerShell :

    $sPath = [System.IO.Path]::Combine( 
    
        [Environment]::GetFolderPath([Environment+SpecialFolder]::MyDocuments),
    
        "MyData")
    
    mardi 27 septembre 2011 09:22
  • C# /VB.NET à l'aide de méthodes natives (P/Invoke)

     

    Vous pouvez appeler l'API SHGetFolderPath native de Windows en C# ou VB.NET à l'aide de méthodes d'appel de plate-forme (P/Invoke) - voir http://pinvoke.net/default.aspx/shell32/SHGetFolderPath.htmlpour exemples. Cela peut être utile parce que l'énumération native de CSIDL comprend de nombreux emplacements de dossier en plus que l’énumération .NET SpecialFolder avait avant .NET 4.0.

    mardi 27 septembre 2011 09:23
  • Windows Script Host – JScript et VBScript

     

    Windows Script Host définit une collection de SpecialFolders qui peut être utilisée en VBScript ou JScript. L'exemple suivant de JScript affichera le chemin vers le Bureau commun ("tous les utilisateurs") :

        var oWsh = WScript.CreateObject("WScript.Shell");
    
        var sDesk = oWsh.SpecialFolders("AllUsersDesktop");
    
        WScript.Echo(sDesk);

     

    Et voici le même code dans VBScript :

        Dim oWsh, sDesk
    
        Set oWsh = WScript.CreateObject("WScript.Shell")
    
        sDesk = oWsh.SpecialFolders("AllUsersDesktop")
    
        WScript.Echo sDesk
    

     

    Références :

    mardi 27 septembre 2011 09:25
  • Les Variables d'environnement et les fichiers Batch

     

    Si aucun des interfaces ci-dessus sont disponibles (par exemple, un fichier de commandes Cmd.exe), Windows définit un nombre relativement petit de variables d'environnement pour identifier certains emplacements de fichiers de système. Ces variables d'environnement (au moins pour les chemins d'accès partiels) sont mieux que les chemins codés. Le tableau suivant present les variables d'environnement liés aux chemins de fichiers sur un système Windows 7 SP1 x 64 et leurs valeurs. Notez que ce sont juste un exemple qu’on trouve sur un ordinateur particulier. Ne supposez pas qu’on a les mêmes endroits sur autres ordinateurs.

     

    Nom de la variable environnement

    Valeur d'exemple

    ALLUSERSPROFILE

    C:\ProgramData

    APPDATA

    C:\Users\username\AppData\Roaming

    CommonProgramFiles

    C:\Program Files\Common Files

    CommonProgramFiles(x86)

    C:\Program Files (x86)\Common Files

    CommonProgramW6432

    C:\Program Files\Common Files

    ComSpec

    C:\Windows\system32\cmd.exe

    HOMEDRIVE

    C:

    HOMEPATH

    \Users\username

    LOCALAPPDATA

    C:\Users\username\AppData\Local

    ProgramData

    C:\ProgramData

    ProgramFiles

    C:\Program Files

    ProgramFiles(x86)

    C:\Program Files (x86)

    ProgramW6432

    C:\Program Files

    PSModulePath

    C:\Windows\system32\WindowsPowerShell\v1.0\Modules\

    PUBLIC

    C:\Users\Public

    SystemDrive

    C:

    SystemRoot

    C:\Windows

    TEMP

    C:\Users\username\AppData\Local\Temp

    TMP

    C:\Users\username\AppData\Local\Temp

    USERPROFILE

    C:\Users\username

    windir

    C:\Windows

     

    Références :

    mardi 27 septembre 2011 09:26