1

2 台の異なるマシンで他の誰かのコード (ライセンス取得済み) を使用しています。あるマシンでは、Application.ExecutablePath はプログラマーが期待していたはずの結果を返しますが、別のマシンではそうではありません。どちらも Windows 7 マシンです。

私のマシンでは、 Application.ExecutablePath は次のようなものを返します。

"C:\\Dir1\\Dir2\\Dir3/bin/Debug/APP.EXE"

他のマシンでは、それが返されます

"C:\\Dir1\\Dir2\\Dir3\\bin/Debug/APP.EXE"

コードがこれを行うため、プログラマーは明らかに 2 番目の戻り文字列を予期していました。

  string path = Application.ExecutablePath;
  short found = (short)path.LastIndexOf(@"\");

  if (found > -1)
  {
    path = path.Substring(0, found);
  }
  try
  {
    foreach (string File in Directory.GetFiles(path + @"\Res\Patterns\", "*.xml"))
    {
      found = (short)File.LastIndexOf(@"\");
      if (found > -1)
        //... use files found

ファイルのディレクトリは Dir3 の下の両方のマシンに存在するため、他のマシンでは見つかりますが、私のマシンでは見つかりません。Windows がスラッシュ (URL パスなど) と UNC パス (「\」を使用) を返すことをいつ、どこで決定するかについての情報が見つかりません。このコードがマシンによって動作が異なるのはなぜですか?

4

1 に答える 1

1

単純化したパスC:\\Dir1\\Dir2\\Dir3/bin/debugには、実際には Dir3 名にハッシュ (#) が含まれていたと推測しています。

これはApplication.ExecutablePath明らかに癖です。Assembly.GetEntryAssembly().Location一貫した結果を返す代わりに使用できます。

于 2014-09-10T19:10:27.040 に答える