2

WPFのメソッドに少し問題がありFile.Copyます。私のコードは非常に単純で、実行すると例外が発生します。

Could not find a part of the path 'Images\37c31987-52ee-4804-8601-a7b9b4d439fd.png'.

Images相対フォルダです。

これが私のコードです。先ほど言ったように、シンプルで同じコードがコンソール アプリケーションで問題なく動作します。まったく問題ありません。

string filenamae = System.IO.Path.Combine(images, Guid.NewGuid().ToString() + System.IO.Path.GetExtension(imageFile)); ;
System.IO.File.Copy(imageFile, filenamae);
this.ImageLocation = string.Empty;

それで、助けてくれる人がいたら、ありがとう。

4

6 に答える 6

2

画像フォルダは存在しますか? File.Copy は自動的に作成しません。

現在のディレクトリが何か知っていますか? ファイルのオープン/保存ボックスはそれを変更できます。したがって、絶対パスで作業する方が常に安全です。

する

Path.GetFullPath(filename)

そして、それがどこを指しているかを見てください。それは正しい場所ですか?

于 2009-06-14T17:58:42.217 に答える
2

相対パスの代わりに絶対パスを使用すると、機能しますか?

于 2009-06-14T20:00:18.243 に答える
1

ファイルにアクセスする前に、System.IO.File.Exists()を呼び出す必要があります。コピーの前に元のファイルが存在するかどうかは、エラーの説明からは明らかではありません。

絶対パスを指定しない場合、相対パスは予期しない場所、通常はプロセスの現在の作業ディレクトリから解決されることがよくあります。このメソッドを呼び出すと、プロセスが現在実行中であることがわかります。

System.IO.Directory.GetCurrentDirectory()

ユーザーはどこからでもプログラムを開始できるため、実行中のプロセスの現在の作業ディレクトリについて想定しないでください。あなたが常に現在の作業ディレクトリを管理していると思っていても、あなたはあなたがどれほど頻繁に間違っているかに驚くでしょう。

于 2009-06-15T08:44:06.573 に答える
0

ディスク上のファイルを期待するのではなく、すべての外部ファイルを実行可能ファイルに埋め込み、これらの埋め込みファイルで動作するようにコードを変更する必要があります。

画像や必要なファイル ("xml/txt/doc") を使用するには、ファイルのビルド アクションを埋め込みリソースに設定し、ファイルの完全修飾名でメソッドを呼び出す必要があります。このような:

[RootNameSpaceOfTheProject].[NameOfFolderInTheProject].[FileNameWithExtension]

例:

ここに画像の説明を入力

メソッドを呼び出します。

var b = ResourceOperations.GetResourceAsByteArray("Store.Resources.EmbeddedIcons.toolbox.png"); たとえば、バイト配列を一時ファイルに書き込んでこれを画像ソースとして使用したり、バイト配列から直接画像を作成したりできます。少なくとも、あなたはあなたのデータを持っています...

このファイルをディスクに保存するには、@ Jon Skeetによってコードを記述します。

 public static void CopyStream(Stream input, Stream output)
 {
     // Insert null checking here for production
     byte[] buffer = new byte[8192];

     int bytesRead;
     while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
     {
         output.Write(buffer, 0, bytesRead);
     }
  }

それを呼び出します:

   using (Stream input = assembly.GetManifestResourceStream(resourceName))
   using (Stream output = File.Create(path))
   { 
      CopyStream(input, output);
   }
于 2014-12-04T14:25:58.093 に答える
0

ローカルにある場合は、ファイル パス ディレクトリに \\ を使用します。ファイルがネットワーク パスに存在する場合は、\\\\(最初に) を使用します。これにより、ネットワーク ドライブが検索されます。

ありがとう

于 2011-06-10T07:26:09.577 に答える
0

デバッガはありますか?ブレークポイントを挿入して、各ステップで使用される値を確認してみませんか?

ファイルシステムに「ファイルが見つかりません」と表示された場合、私はそれについて議論する必要はありません...

于 2009-06-15T06:57:37.627 に答える