2009-06-19 2 views
7

Относительные пути в C# действуют для меня. В одном случае Im обрабатывает набор объектов Texture2d для моего приложения, беря имя файла и используя это, чтобы найти файлы и загрузить текстуры в объекты изображения. Затем я загружаю изображение из относительного пути, хранящегося в файле класса, и использую относительный путь, который должен быть относительно Content/gfx. Но если я не загружу эти текстуры, эти относительные пути не удастся. Как я могу объяснить, что мой путь rel не будет терпеть неудачу? В веб-работе все пути rel относятся к папке, в которой находится файл, из которого мы работаем, могу ли я настроить его таким образом и сделать все пути rel в корневую папку, где находится мое приложение?Относительные пути в Winforms

+0

Является ли это в отладки или в развернутом режиме? –

ответ

18

Я рекомендую не использовать относительные пути в первую очередь.

Используйте Path.Combine, чтобы превратить ваши относительные пути в абсолютные пути. Например, вы можете использовать это, чтобы получить полный путь к загрузочному EXE:

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

После того, как вы едите, что вы можете получить его каталог:

string exeDir = Path.GetDirectoryName(exeFile); 

и превратить ваш относительный путь к абсолютному путь:

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

Это будет гораздо надежнее, чем использовать относительные пути.

+0

Thx alot для двух первых линий, просто я искал. Я бы использовал «@» в третьей строке, чтобы избежать двойной обратной косой черты. – radbyx

+0

Если в моем каталоге есть пробел, он не может найти путь, но если он этого не делает, он отлично работает. – Xaisoft

1

Если вы ждете ресурс, чтобы быть в том же каталоге, что и исполняемый файл или в подкаталог этого каталога, то лучше всегда использовать

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

или если вы обеспокоены тем, что рабочий каталог Возможно, вы ошиблись:

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

// [имя пространства] является пространством имен // вы должны скопировать файл .-- в Depug файл

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