web-dev-qa-db-fra.com

Comment obtenir le chemin relatif d'un fichier dans Visual Studio?

J'essaie d'obtenir le chemin d'un fichier image que j'ai ajouté dans la solution Explorer de Visual Studio, mais je n'ai pas pu obtenir le chemin relatif de cette image. H est la structure de fichier de mon projet:

/BulutDepoProject 
 /FolderIcon
 Folder.ico 
 Main.cs 

Je peux obtenir l'image comme ceci:

"C:\\Users\\Tolga\\Desktop\\BulutDepo\\BulutDepoProject\\FolderIcon\\Folder.ico" 

Mais je devrais pouvoir l'obtenir avec quelque chose comme:

"~\\FolderIcon\\Folder.ico"

Je suppose que je ne connais pas la syntaxe exacte, je ne peux donc pas aller chercher l'image. :(

65
Tolga Evcimen

Lorsque vous souhaitez utiliser un type de fichier externe quelconque, il existe certainement un moyen de le placer dans un dossier du projet, mais cela n’est pas aussi valable que de l’obtenir à partir de ressources. Dans un projet Visual Studio classique, vous devriez avoir un fichier Resources.resx dans la section Properties. Sinon, vous pouvez facilement ajouter votre propre fichier Resource.resx. Et ajoutez n'importe quel type de fichier, vous pouvez accéder à la procédure pas à pas pour ajouter des fichiers de ressources à votre projet ici .

Après avoir des fichiers de ressources dans votre projet, les appeler est simple comme ceci:

var myIcon = Resources.MyIconFile;

Bien sûr, vous devriez ajouter la déclaration using Properties comme ceci:

using <namespace>.Properties;
48
Tolga Evcimen

Je suis un peu en retard et je ne sais pas si c'est ce que vous cherchez, mais je pensais l'ajouter au cas où quelqu'un le jugerait utile.

Supposons que ceci soit votre structure de fichier:

/BulutDepoProject
    /bin
        Main.exe
    /FolderIcon
        Folder.ico
        Main.cs

Vous devez écrire votre chemin relatif au fichier Main.exe. Donc, vous voulez accéder à Folder.ico, dans votre Main.cs, vous pouvez utiliser:

String path = "..\\FolderIcon\\Folder.ico"

Cela a semblé fonctionner pour moi!

31
AdamInTheOculus

Omettez le "~ \":

var path = @"FolderIcon\Folder.ico";

~\ ne veut rien dire en termes de système de fichiers. Le seul endroit que j'ai vu correctement utilisé se trouve dans une application Web, où ASP.NET remplace le tilde par le chemin absolu vers la racine de l'application.

Vous pouvez généralement supposer que les chemins sont relatifs au dossier dans lequel se trouve le fichier EXE. Assurez-vous également que l'image est spécifiée comme "contenu" et "copier si plus récent"/"copier toujours" dans l'onglet Propriétés de Visual Studio.

19
3Dave

J'ai également rencontré le même problème et j'ai pu le résoudre. Alors laissez-moi vous expliquer les étapes que j'ai appliquées. Je vais l'expliquer selon votre scénario.

Selon ma méthode, nous devons utiliser la classe 'Path' et la classe 'Assembly' pour obtenir le chemin relatif.

Donc, commencez par importer System.IO et System.Reflection en utilisant des instructions.

Puis tapez la ligne de code donnée ci-dessous.

        var outPutDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly(). CodeBase);

En fait, la ligne donnée ci-dessus stocke le chemin du répertoire de sortie de votre projet (ici, le répertoire "sortie" fait référence au dossier Debug de votre projet).

Maintenant, copiez votre répertoire FolderIcon dans le dossier Debug. Puis tapez la ligne donnée ci-dessous.

var iconPath = Path.Combine(outPutDirectory, "FolderIcon\\Folder.ico");

Maintenant, cette variable 'iconPath' contient le chemin complet de votre Folder.ico. Tout ce que vous avez à faire est de le stocker dans une variable chaîne. Utilisez la ligne de code ci-dessous pour cela.

string icon_path = new Uri(iconPath ).LocalPath;

Vous pouvez maintenant utiliser cette variable chaîne icon_path comme chemin d'accès relatif à l'icône.

Merci.

12
GeorgeT

Je pense qu'en utilisant ce sera le plus facile

new Uri("pack://application:,,/FolderIcon/" + youImageICO);

ou ce code fonctionnera sur n'importe quelle machine qui si votre dossier est dans votre projet racine si vous voulez le changer ... changez simplement cette section @ ".. \"

public static string bingPathToAppDir(string localPath)
{
    string currentDir = Environment.CurrentDirectory;
    DirectoryInfo directory = new DirectoryInfo(
        Path.GetFullPath(Path.Combine(currentDir, @"..\..\" + localPath)));
    return directory.ToString();
}
3
Photonic