2 Stimmen

File.Copy und WPF

Ich habe ein kleines Problem mit der Methode File.Copy in WPF, mein Code ist sehr einfach und ich erhalte eine Ausnahme, wenn ich ihn ausführe,

Konnte den Pfad 'Images\37c31987-52ee-4804-8601-a7b9b4d439fd.png' nicht finden.

wo Images ein relativer Ordner ist.

Hier ist mein Code, wie gesagt einfach und der gleiche Code funktioniert einwandfrei in einer Konsolenanwendung, kein Problem.

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;

Also, wenn jemand helfen kann, vielen Dank.

0voto

StepUp Punkte 29996

Es ist notwendig, alle externen Dateien in die ausführbare Datei einzubetten und Ihren Code so zu ändern, dass er mit diesen eingebetteten Dateien arbeitet, anstatt Dateien auf der Festplatte zu erwarten.

Um Bilder oder was auch immer Sie brauchen Dateien ("xml/txt/doc") zu verwenden, müssen Sie die Build-Aktion Ihrer Datei auf Embedded Resource setzen und die Methode mit dem voll qualifizierten Namen der Datei aufrufen, wobei der Name wie folgt zusammengestellt wird:

[RootNameSpaceOfTheProject].[NameOfFolderInTheProject].[FileNameWithExtension]

Beispiel:

Geben Sie hier die Bildbeschreibung ein

Rufen Sie die Methode auf:

var b = ResourceOperations.GetResourceAsByteArray("Store.Resources.EmbeddedIcons.toolbox.png"); Nun können Sie das Byte-Array zum Beispiel in eine temporäre Datei schreiben und dies als Bildquelle verwenden, oder Sie können direkt aus dem Byte-Array ein Bild erstellen. Zumindest haben Sie Ihre Daten...

und um diese Dateien auf eine Festplatte zu speichern, sollten wir einen Code schreiben von @Jon Skeet :

 public static void CopyStream(Stream input, Stream output)
 {
     // Fügen Sie hier für die Produktion eine Überprüfung auf NULL ein
     byte[] buffer = new byte[8192];

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

rufen Sie es dann auf:

   using (Stream input = assembly.GetManifestResourceStream(resourceName))
   using (Stream output = File.Create(path))
   { 
      CopyStream(input, output);
   }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X