0

「画像」フォルダーを持つ Windows アプリケーションがあります。実行時にイメージが存在するかどうかを確認する必要があります。以下のコードは私が持っているものですが、常に false を返します。

 if ( File.Exists("images/" + item.tool_image) )
        {
            Image img;
            img = Image.FromFile("images/" + item.tool_image);
            titem.Image = img;
        }

問題またはこれを行う適切な方法は何ですか。

4

6 に答える 6

3

探しているファイルがアプリケーションの作業ディレクトリに存在しない場合はFile.Exists、完全修飾パスを使用して呼び出します。

if (File.Exists(@"C:\images\" + item.tool_image))
{ ... }

もちろん、ファイルが実際にその場所に存在することを確認してください。

Pathクラスが提供するツールを使用すると、生活が楽になります。

if (File.Exists(Path.Combine(@"C:\images", item.tool_image)))
{ ... }
于 2011-11-13T05:32:15.527 に答える
1

パスが間違っています に変更してみてください

 string basePath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
            string imageFileName = System.IO.Path.Combine(basePath, "Images",item.tool_image);
     if ( File.Exists(imageFileName) )
            {
                Image img;
                img = Image.FromFile(imageFileName);
                titem.Image = img;
            }
于 2011-11-13T05:52:02.357 に答える
1

WindowsアプリケーションでFile.Existsを適切に使用するには?

あなたはそうしない!

開こうとする前にファイルが存在するかどうかを確認することは、ほとんど適切ではありません。ここでは、アクセス許可、ロック、共有、時間など、他にも作業が行われています。

代わりに、これを行う正しい方法は、ファイルが存在するかどうかに関係なくファイルを開こうとし、ファイルを開こうとして失敗した場合は例外をキャッチすることですFile.Exists() チェックを実行した後でも、とにかくこの例外を処理できる必要があります。これにより、最初の File.Exists() チェックがコードにとって冗長になるだけでなく、ファイルシステムへの余分なトリップが発生するため、無駄になります...そしてファイルに行くよりも遅いプログラミングでできることはあまりありませんシステム。

于 2011-11-13T05:52:49.417 に答える
0

コードが現在実行されている場所から見ています。また、「/」は間違った方向です。また、複数の場所でパスを定義しているため、後で問題が発生する可能性があります。

var path = string.Format(@"c:\somewhere\images\{0}", item.tool_image);
if (File.Exists(path))
{
   Image img;
   img = Image.FromFile(path);
   titem.Image = img;
}

変数を設定するのはあなた次第ですpathが、おそらくあなたのコード例では、あなたが期待する場所はチェックされていません。

于 2011-11-13T05:32:58.870 に答える
0

あなたがそれを呼んでいる方法では、あなたは画像フォルダ内の文字列item.tool_imageにあるものすべてのファイルを探しています。この画像フォルダは、実行可能ファイルが含まれているディレクトリ内にあることに注意してください。

たとえば、File.Exists( "images / image.jpg")と呼んだだけで、機能しました。

于 2011-11-13T05:33:00.693 に答える
0

誰もが言及したように、完全修飾パスを使用してください。また、Path.Combine を多用するので、ディレクトリを結合するときにスラッシュを 1 つまたは 2 つ見逃す心配はありません。現在実行中のディレクトリも便利です...

File.Exists(Path.Combine(Environment.CurrentDirectory, "Images", item.tool_image));
于 2011-11-13T05:35:29.803 に答える