10
votes

Comment définir le répertoire initial sur un fichier openFileDialog au dossier "Downloads" des utilisateurs en C #

OK, j'ai donc une openfiledialog et je souhaite définir le répertoire initial sur le dossier "Télécharger" des utilisateurs. Ceci est une application interne et, par conséquent, je suis sûr que l'utilisateur utilisera Windows 7.

var ofd = new OpenFileDialog();

//This doesn't work
ofd.InitialDirectory =
    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Downloads");

//This doesn't work either
ofd.InitialDirectory = @"%USERPROFILE%\Downloads";

ofd.Filter = "Zip Files|*.zip";

ofd.ShowDialog();

txtFooBar.Text = ofd.FileName;


2 commentaires

Dupliqué possible de Dossier Téléchargements: Pas assez spécial?


Toutes mes excuses, cela a parfaitement travaillé pour moi. Merci Hans.


4 Réponses :


7
votes

Peut-être que cela pourrait aider: https://stackoverflow.com/a/1175250/333404

Mise à jour :

fonctionne pour moi: https://stackoverflow.com/a/3795159/333404 xxx < / p>


1 commentaires

HMM, autre travail du répertoire OK, par exemple, Environnement.GetFolderDePath (Environnement.Specialfolder.personal) fonctionne bien, mais lorsque j'essaie d'aller un pas plus loin, le répertoire initial revient simplement à la racine de mon lecteur C.



0
votes

Essayez ceci xxx


0 commentaires

0
votes

Les téléchargements dossier ont un nom localisé et de toute façon ne sont jamais une bonne idée d'assumer un emplacement relatif spécifique d'un dossier bien connu (même s'il est bien documenté) car il peut être modifié par les paramètres utilisateur aussi.

malchanceux le Specialfolder L'énumération ne contient pas de chaque dossier connu, vous devez donc utiliser un peu d'interopt, voir MSDN . De cette page, nous pouvons trouver le Liste complète des dossiers connus , ce que vous recherchez est folderid_downloads , parce que le shgekknowDederPath Fonction nécessite un GUID que vous devez déclarer quelque part qui constante. Votre code sera alors quelque chose comme ceci: xxx

Veuillez noter que vous pouvez utiliser la signature P / invoke que vous préférez (quelqu'un utilise un StressBuilder, une autre personne d'une entreprise. .


0 commentaires

11
votes

J'ai pu utiliser l'environnement pour appeler directement mais je devais ajouter tostring () code> à la fin. Cela n'a pas fonctionné tant que je l'ai ajouté.

saveFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);


1 commentaires

Au lieu de rejeter les modifications à mon commentaire, je dirai que lorsque j'ai posté cette initiative à l'origine en 2015, mon compilateur a été obligé de nous faire pression () pour que cette fonction fonctionne. À VS2019, cela fonctionne très bien. C'était mon expérience et c'est pourquoi j'ai posté ce commentaire.