2017-05-07 1 views
3

Ich versuche, eine Audiodatei in C# mithilfe eines Dateipfads in die Zwischenablage zu kopieren. Das Problem, auf das ich stoße, ist, dass es entweder nicht kopiert oder nicht korrekt kopiert wird, weil es nicht außerhalb der Anwendung eingefügt werden kann.WPF C# Audiodatei in Zwischenablage kopieren

Hier ist, wie ich versuche, ihn in die Zwischenablage zu kopieren:

b_array = File.ReadAllBytes(fileLocation); 
Clipboard.Clear(); 
Clipboard.SetAudio(b_array); 

die Variable filelocation in meinem Test gleich so etwas wie: C: \ Benutzer \ ben \ Music \ Samples \ kick_05.wav

+0

Erwarten Sie, dass die Datei im Windows-Explorer zu können, fügen Sie zum Beispiel? Mit diesem Code konnte man nur einfügen (ich glaube, Audio nie probiert) in einer Anwendung, die das Audioformat versteht, also einen Audioeditor von irgendeiner Art. –

+0

@AlexPaven Ich versuche es so zu machen, dass man die Datei fast überall (Datei-Explorer und Audiobearbeitungsprogramme) fast so einfügt, wie die Kopierfunktion im Datei-Explorer funktioniert. –

+1

Ich habe nicht viel Erfahrung mit der Zwischenablage, aber ich denke, Sie müssen einen separaten Eintrag mit der Datei Info einfügen, sonst gäbe es keine Möglichkeit zu wissen, was der Dateiname und Speicherort zu kopieren war - siehe Clipboard.SetFileDropList –

Antwort

5

Keine Notwendigkeit, den Inhalt der Datei zu lesen. Sie können die Datei direkt in die Zwischenablage hinzufügen SetFileDropList

StringCollection files = new StringCollection(); 
files.Add(fileLocation); 
Clipboard.SetFileDropList(files); 
mit
+0

Ich versuchte das und es wurde eine Ausnahme ausgelöst: System.Runtime.InteropServices.COMException: 'OpenClipboard fehlgeschlagen (Ausnahme von HRESULT: 0x800401D0 (CLIPBRD_E_CANT_OPEN))' –

+0

Versuchen Sie dies in einem Hintergrundthread zu tun? Ich bin mir ziemlich sicher, dass es auf dem UIhread passieren muss. Ich habe Probleme gesehen, wo es in einer Task.Run verwenden würde würde eine Ausnahme werfen –

+0

Ich mache das definitiv auf dem UI-Thread. Ich habe es sogar eingepackt, um sicherzugehen, und ich habe das gleiche Problem: this.Dispatcher.Invoke (() => {...}); –

Verwandte Themen