10

C# 中的相对路径对我来说很奇怪。在一种情况下,我为我的应用程序处理一组 Texture2d 对象,它获取文件名并使用它来定位文件并将纹理加载到 Image 对象中。然后我从存储在类文件中的相对路径加载图像,并使用需要相对于 Content/gfx 的相对路径。但是如果我不加载这些纹理,这些相对路径将会失败。我如何保证我的 rel 路径不会失败?在网络工作中,所有 rel 路径都相对于我们正在使用的文件所在的文件夹,我可以这样设置它并使所有 rel 路径指向我的应用程序所在的根文件夹吗?

4

3 回答 3

22

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

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

这将比尝试使用相对路径可靠得多。

于 2009-06-19T19:29:35.660 回答
3

如果您希望资源与可执行文件位于同一目录或该目录的子目录中,则最好始终使用

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

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

string fullPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location), subPath);
于 2009-06-19T19:29:15.783 回答
0

// [命名空间] 是命名空间 //你应该复制你的文件.-- 到调试文件中

      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();
于 2014-04-12T13:32:31.570 回答