2017-11-13 2 views
0

特定のファイルが存在するかどうかを検出しようとしています。たとえば、私はこのディレクトリでJoystick.pngを探しているとしましょう。F:\ FrontEnd \ Themes \ Custom \ Images \ Platform \ Controller \ Joystick.pngAssembly.GetEntryAssembly()を使用してファイルが存在するかどうかを検出する場所

アプリケーションが他の場所にインストールしてください。ただし、ディレクトリ構造は変更されません。

私は、WPFのイメージへのパスを送信するには、この

string path = $"pack://siteoforigin:,,,/Themes/Custom/Images/Controls/{game.Platform}/{controller}.png"; 

を使用していたが、私はFile.Existsに、この同じ変数を渡すことができないことleanrするようになりました。だから私は別の方法を考えなければならなかった。

私はこれを発見した:

string exists = Assembly.GetEntryAssembly().Location; 

私にこの結果を取得した:F:\ FrontEndの\ FrontEnd.exe

は、だから私の質問は、どのように私はvar existsを変更しない、であるので、それは試合ですvar pathの構造は?

+0

'Assembly.GetEntryAssembly()。Location'は、パック形式の'/Themes/... 'の前にすべてを提供します。 –

+0

私は知っている、私は結果を掲載した。 FrontEnd.exeを残りのファイルパスに置き換えたい。 – Sweepster

答えて

1

あなたはパス文字列を操作するためSystem.IO.Pathの異なるメンバーを使用することができます。

var exePath = @"F:\FrontEnd\FrontEnd.exe"; 
var filePath = @"/Themes/Custom/Images/Controls/{game.Platform}/{controller}.png"; 
var relPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(exePath),filePath); 
var packPath = @"pack://siteoforigin:,,," + relPath; 
0

これはあなたのアセンブリのルートを与える"themes\\custom\\images\\controls\\pc"$"themes\\custom\\images\\controls\\{platform}\\{imagename}"

に、変更することができます。この

var path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); 

    var pathtoCombine = Path.Combine(path, "themes\\custom\\images\\controls\\pc"); 

    var image = Path.Combine(pathtoCombine, "image.txt"); 
    var exists = File.Exists(image); 

を試してみてください。例えば

C:プロジェクト\ StringSandbox \ StringSandbox \ binに\デバッグ\ Visual Studioの2015 \ \ユーザー\\文書

+0

しかし、私はアセンブリのルートを望んでいません。パス変数のファイルパスに一致させたい。 – Sweepster

+0

あなたのPNGをコンテンツとしてマークし、 'Copy to output directory' - > Copy always –

+0

を選択しますが、イメージ自体は存在しないかもしれません。イメージファイルの名前は、ユーザーが変更できるデータベース内の値に基づいています。したがって、イメージはまだ存在していても存在していなくても、存在しなければ、プログラムをクラッシュさせたくありません。そのため、コードを実行する前にファイルパスが有効かどうかを検出する必要があります。私のdllに画像を追加すると、全体のポイントが打ち負かされます – Sweepster

関連する問題