Относительные пути в C# действуют для меня. В одном случае Im обрабатывает набор объектов Texture2d для моего приложения, беря имя файла и используя это, чтобы найти файлы и загрузить текстуры в объекты изображения. Затем я загружаю изображение из относительного пути, хранящегося в файле класса, и использую относительный путь, который должен быть относительно Content/gfx. Но если я не загружу эти текстуры, эти относительные пути не удастся. Как я могу объяснить, что мой путь rel не будет терпеть неудачу? В веб-работе все пути rel относятся к папке, в которой находится файл, из которого мы работаем, могу ли я настроить его таким образом и сделать все пути rel в корневую папку, где находится мое приложение?Относительные пути в Winforms
7
A
ответ
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");
Это будет гораздо надежнее, чем использовать относительные пути.
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();
Является ли это в отладки или в развернутом режиме? –