2009-06-19 20 views
7

Las rutas relativas en C# están actuando de forma incorrecta para mí. En un caso, estoy manejando un conjunto de objetos Texture2d en mi aplicación, tomando el nombre del archivo y usándolo para ubicar los archivos y cargar las texturas en los objetos de Imagen. A continuación, cargo una imagen de una ruta relativa almacenada en el archivo de clase y uso una ruta relativa que debe ser relativa a Content/gfx. Pero si no carga estas texturas, estas rutas relativas fallarán. ¿Cómo puedo asegurar que mi camino rel no fallará? En el trabajo web, todas las rutas rel están relacionadas con la carpeta en la que está el archivo en el que estamos trabajando, ¿puedo configurarlo de esta manera y hacer todas las rutas rel a la carpeta raíz donde se encuentra mi aplicación?Rutas relativas en Winforms

+0

¿Es esto de depuración o en modo desplegado? –

Respuesta

18

yo no recomiendo el uso de rutas relativas en el primer lugar.

Usa Path.Combine para convertir tus rutas relativas en rutas absolutas. Por ejemplo, se puede usar esto para obtener la ruta completa para el archivo EXE de inicio:

string exeFile = (new System.Uri(Assembly.GetEntryAssembly().CodeBase)).AbsolutePath; 

Una vez que tienes eso, se puede obtener es directorio:

string exeDir = Path.GetDirectoryName(exeFile); 

y convertir su ruta relativa a un absoluto ruta:

string fullPath = Path.Combine(exeDir, "..\\..\\Images\\Texture.dds"); 

Esto será mucho más fiable que tratar de utilizar rutas relativas.

+0

Muchas gracias por las dos primeras líneas, solo estaba buscando. Sin embargo, usaría '@' en la tercera línea para evitar dobles barras invertidas. – radbyx

+0

Si mi directorio tiene un espacio, no puede encontrar la ruta, pero si no funciona, funciona bien. – Xaisoft

1

Si usted está esperando un recurso para estar en el mismo directorio que el archivo ejecutable o en un subdirectorio de ese directorio, lo mejor es utilizar siempre

string fullPath = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), subPath); 

o si está preocupado de que el directorio de trabajo que podría estar equivocado usted puede hacer esto:

string fullPath = System.IO.Path.Combine(System.Reflection.Assembly.GetEntryAssembly().Location, subPath); 
0

// [nombre de espacio] es el espacio de nombres // debería copiar el archivo .-- en Depug archivo

 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(); 
Cuestiones relacionadas