Winforms中的相对路径(Relative Paths in Winforms)

2019-06-23 16:51发布

在C#中的相对路径的行为是扭曲我。 在一个案例中林处理一组的Texture2D对象,以我的应用程序,它走的是文件名,并以此来查找文件和纹理加载到图片的对象。 我然后从存储在类文件的相对路径加载图像,并使用该需要是相对于内容/ GFX的相对路径。 但是,如果我不加载这些纹理,这些相对路径会失败。 我怎样才能garuantee我的相对路径不会失败? 在网站工作的所有相对路径是相对于该文件夹我们从工作文件中,我可以将它设置这种方式,让在我的应用程序位于所有相对路径的根文件夹?

Answer 1:

我建议首先不使用相对路径。

使用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");

这会比试图使用相对路径更可靠。



Answer 2:

如果你期待的资源是在同一个目录下的可执行文件或在该目录的子目录,最好始终使用

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

或者如果你是担心工作目录可能是错的,你可以这样做:

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


Answer 3:

// [命名空间]是命名空间//您应该复制文件到.--文件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();


文章来源: Relative Paths in Winforms