2012-11-12 12 views
42

Sto cercando di ottenere il percorso di un file immagine che ho aggiunto in solution explorer in Visual Studio, ma non ho potuto ottenere il percorso relativo di quell'immagine. H è la struttura dei file del mio progetto:Come ottenere il percorso relativo di un file in Visual Studio?

 
/BulutDepoProject 
    /FolderIcon 
     Folder.ico 
     Main.cs 

posso ottenere l'immagine in questo modo:

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

Ma dovrebbe essere in grado di farlo con qualcosa di simile:

"~\\FolderIcon\\Folder.ico" 

Immagino di non conoscere la sintassi esatta di esso, quindi non posso recuperare l'immagine. :(

+0

Si dovrebbe controllare questo => http://stackoverflow.com/questions/6895457/how-to-define-relative-paths-in-visual-studio-project – MarcD

+0

http://stackoverflow.com/a/ 799431/1577396 e anche http://msdn.microsoft.com/en-us/library/system.uri.makerelativeuri.aspx –

risposta

35

Quando si desidera utilizzare qualsiasi tipo di file esterno, esiste sicuramente un modo per inserirli in una cartella all'interno del progetto, ma non così validi come ottenerli dalle risorse. In un normale progetto Visual Studio, dovresti avere un file Resources.resx nella sezione Properties, in caso contrario, puoi facilmente aggiungere il tuo file Resource.resx. E aggiungi qualsiasi tipo di file, puoi raggiungere la procedura dettagliata per aggiungere file di risorse al tuo progetto here.

Dopo aver file di risorse nel progetto, chiamandoli è facile come questo:

var myIcon = Resources.MyIconFile; 

Ovviamente si deve aggiungere l'using Properties dichiarazione come questa:

using <namespace>.Properties; 
+1

Le risorse sono 'readonly' sebbene ...:/ – christo8989

+0

@ christo8989 L'OP è su un file * image *, che sarà comunque' readonly', quindi .... –

13

omettere il "~ \":

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

~\ non significa nulla in termini di file system L'unico posto che ho visto che correttamente utilizzata è in una web app, dove. ASP.NET sostituisce la tilde con il percorso assoluto alla radice dell'applicazione.

in genere è possibile assumere i percorsi sono relativi alla cartella in cui si trova il file EXE. Inoltre, assicurarsi che l'immagine viene specificato come contenuto" "e" copia se più recente "/" copia sempre "nella scheda delle proprietà in Visual Studio.

10

Ho anche incontrato lo stesso problema e sono riuscito a farcela. Quindi lasciatemi spiegare i passaggi che ho applicato. Lo spiegherò in base al tuo scenario.

In base al mio metodo, è necessario utilizzare la classe "Path" e la classe "Assembly" per ottenere il percorso relativo.

Quindi, prima importazione System.IO e System.Reflection nell'utilizzo delle istruzioni.

Quindi digitare la riga di codice indicata di seguito.

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

realtà sopra data linea memorizza il percorso della directory di output del progetto. (Qui directory 'uscita' si riferisce alla cartella diDebug del progetto).

Ora copia la cartella FolderIcon nella cartella Debug. Quindi digitare la linea indicata di seguito.

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

Ora questa variabile "iconPath" contiene l'intero percorso di Folder.ico. Ora tutto ciò che devi fare è archiviare una variabile stringa. Usa la seguente linea per quello.

string icon_path = new Uri(iconPath).LocalPath; 

Ora è possibile utilizzare questa variabile stringa icon_path come percorso relativo all'icona.

Grazie.

+0

* Ora copia la cartella FolderIcon nella cartella Debug. * Devo? – alex

1

penso di utilizzare questo sarà il più semplice

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

o questo codice funzionerà su qualsiasi machin e che, se la cartella è nel vostro progetto principale, se si vuole cambiare ... basta cambiare questa sezione @ ".. \"

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

Sono un po 'in ritardo, e non sono sicuro se questo è quello che stai cercando, ma ho pensato di aggiungerlo nel caso in cui qualcun altro lo trovasse utile.

Supponiamo questa è la tua struttura di file:

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

È necessario scrivere il percorso relativo al file Main.exe. Quindi, si desidera accedere Folder.ico, nella vostra Main.cs è possibile utilizzare:

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

Che sembrava funzionare per me!

+0

Questa è una soluzione migliore nel mio caso dal il file a cui si fa riferimento è gestito da un altro progetto nella soluzione. La sintassi non supporta anche un singolo punto? 'string path =". \\ FileName.txt "' –

Problemi correlati