2 Stimmen

File.Copy und WPF

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

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

donde Images ist ein relativer Ordner.

Hier ist mein Code, wie ich sagte einfach und der gleiche Code funktioniert gut in einer Konsolenanwendung, überhaupt 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;

Wenn also jemand helfen kann, danke.

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 benötigen files("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 zusammengesetzt wird:

[RootNameSpaceOfTheProject].[NameOfFolderInTheProject].[FileNameWithExtension]

Ejemplo:

enter image description here

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 diese als Bildquelle verwenden, oder Sie können ein Bild direkt aus dem Byte-Array erstellen. Zumindest haben Sie Ihre Daten...

und um diese Dateien auf einer Festplatte zu speichern, sollten wir einen Code schreiben, der @ 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);
     }
  }

dann rufen Sie es an:

   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