Вопрос по c# – Относительные пути в Winforms

7

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

Это в режиме отладки или в развернутом режиме? chris.w.mclean

Ваш Ответ

3   ответа
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();
19

использование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");

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

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

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

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

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

Похожие вопросы