10

C# の相対パスは、私にとって厄介な動作をしています。あるケースでは、一連の Texture2d オブジェクトをアプリに処理し、ファイル名を取得し、これを使用してファイルを見つけ、テクスチャを Image オブジェクトにロードします。次に、クラス ファイルに格納されている相対パスから画像を読み込み、Content/gfx に相対する必要がある相対パスを使用します。しかし、これらのテクスチャをロードしないと、これらの相対パスは失敗します。rel パスが失敗しないことを保証するにはどうすればよいですか? Web 作業では、すべての 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

// [名前空間] は名前空間です //ファイルをコピーする必要があります.-- 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();
于 2014-04-12T13:32:31.570 に答える