I percorsi relativi in C# si comportano in modo approssimativo per me. In un caso sto gestendo un set di oggetti Texture2d sulla mia app, prendendo il nome del file e usandolo per localizzare i file e caricare le trame in oggetti Image. Carico quindi un'immagine da un percorso relativo memorizzato nel file di classe e utilizzo un percorso relativo che deve essere relativo a Content/gfx. Ma se non carico queste trame questi percorsi relativi falliranno. Come posso garantire che il mio percorso rel non fallirà? Nel web work tutti i percorsi rel sono relativi alla cartella in cui si trova il file, posso impostarlo in questo modo e creare tutti i percorsi rel alla cartella principale in cui si trova la mia app?Percorsi relativi in Winform
risposta
Si consiglia di non utilizzare i percorsi relativi in primo luogo.
Utilizzare Path.Combine per trasformare i percorsi relativi in percorsi assoluti. Ad esempio, è possibile utilizzare questo per ottenere il percorso completo del file EXE di avvio:
string exeFile = (new System.Uri(Assembly.GetEntryAssembly().CodeBase)).AbsolutePath;
Una volta che avete che, si può ottenere è directory:
string exeDir = Path.GetDirectoryName(exeFile);
e trasformare il vostro percorso relativo a un assoluto percorso:
string fullPath = Path.Combine(exeDir, "..\\..\\Images\\Texture.dds");
Questo sarà molto più affidabile rispetto al tentativo di utilizzare percorsi relativi.
Se vi aspettate una risorsa di essere nella stessa directory del file eseguibile o in una sottodirectory di quella directory, è meglio usare sempre
string fullPath = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), subPath);
o se siete preoccupati che la directory di lavoro è possibile che tu possa fare ciò:
string fullPath = System.IO.Path.Combine(System.Reflection.Assembly.GetEntryAssembly().Location, subPath);
// [spazio dei nomi] è il nome dello spazio // è necessario copiare il file .-- in Depug il file
string path = (Assembly.GetEntryAssembly().Location + "");
path = path.Replace("name space", "filename.--");
// [WindowsFormsApplication4] is name space
//you should copy your "mysound.wav" into Depug file
//example::
string path_sound = (Assembly.GetEntryAssembly().Location + "");
path_sound = path_sound.Replace("WindowsFormsApplication4.exe", "mysound.wav");
SoundPlayer player1 = new SoundPlayer(path_sound);
player1.Play();
È questo in debug o in modalità schierato? –