Entwickler-Ecke
IO, XML und Registry - Alle Informationen zu einer ausgewählten Datei
Delete - Di 14.06.11 11:10
Titel: Alle Informationen zu einer ausgewählten Datei
Hallo Leute,
kennt Jemand eine Möglichkeit alle Informationen einer Datei anzuzeigen, bei FileInfo ist mir die Auswahl einfach zu klein, also wie wenn ich auf eine Datei mit der rechten Maustaste gehe, dann unter Eigenschaften und Details!?
Grüße BleachRukia
Moderiert von
Christian S.: Topic aus WinForms verschoben am Di 14.06.2011 um 14:59
Delete - Di 14.06.11 13:55
Danke erstmal für die tollen Links :)
Bin jetzt auf auf die Ultra id3 Library gestoßen die sehr gut ist um Musik Infos zu bekommen.
Aber gibt es da nicht eine andere Library die wikrlich alles an Infos ausgeben kann unabhängig von der Datei, wie wenn ich auf Eigenschaften gehe und dann auf Details ?
Grüße BleachRukia
Delete - Di 14.06.11 14:46
Was sind denn für die ALLE Informationen?
jaenicke - Di 14.06.11 14:58
Wenn du genau diese Anzeige willst, rufe doch einfach den Windows Dialog zu der Datei auf, dann sieht der Nutzer doch alles. :nixweiss:
Delete - Di 14.06.11 15:32
Hallo,
will halt spezial rausfiltern :)
Also ich lieste mal auf was ich dem Benutzer rausgeben möchte:
Für Bilder:
Breite,
Höhe,
Bildtiefe,
von welchem Programm es erstellt wurde,
Größe,
Format.
Bei Musik:
AlbumCover
Herausgeber,
Copyright,
Artist,
Album,
Jahr,
Titel,
Titelnummer,
Länge,
Genre,
Bitrate,
Größe,
Format.
Davon habe ich bisher selber herausgefunden:
Bei Bildern:
Breite,
Höhe,
Größe,
Format.
Bei Musik ohne UltraID3 (mit WMP):
Artist,
Album,
Titel,
Länge,
Genre,
Bitrate,
Größe,
Format.
Kennt da jemand eine Lösung für mein Problem ?
Grüße BleachRukia
Delete - Sa 18.06.11 23:27
Vielen vielen vielen dank Kha, durch deine Antwort habe ich eine Informationsquelle gefunden die auf den ersten Blick fast unendlich wirkt :D
Mit diesem Code glaube ich kann ich fast alles abrufen, falls mir ihrgendwelche lücken auffallen sollten melde ich mich nochmal :)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| OpenFileDialog o = new OpenFileDialog();
if (o.ShowDialog() == DialogResult.OK) { Microsoft.WindowsAPICodePack.Shell.ShellFile tst = Microsoft.WindowsAPICodePack.Shell.ShellFile.FromFilePath(o.FileName); this.label1.Text = tst.Properties.System... } |
Grüße BleachRukia
Moderiert von
Kha: C#-Tags hinzugefügt
Delete - So 19.06.11 18:56
Hallo Leute,
sind jetzt noch 2 Probleme aufgetreten die ich nicht lösen konnte, vielleicht wisst ihr ja die Lösung.
Mit diesem Code hier:
C#-Quelltext
1:
| FileDetails.Properties.System.Media.Duration.Value; |
hatte ich versucht die Dauer einer Musik/Video Datei anzuzeigen, nur leider wird mir das Ergebnnis, glaube ich, in Nanosekunden angezeigt :(
Beim 2. Problem:
C#-Quelltext
1:
| this.pictureBox1.Image = FileDetails.Thumbnail.Bitmap; |
hatte ich versucht ein Album Cover in eine pBox zu laden, das ist mir auch gut gelungen, sogar kann ich Thumbnail für Videos in meiner pBox anzeigen lassen.
Nur leider wenn die angegebene Musik Datei kein Album Cover hat, wird das Default Thumbnail angezeigt :(
Hatte es schon versucht mit
if(FileDetails.Thumbnail.Bitmap != null) aber da das Thumbnail immer ein Bild hat, hat das nicht funktioniert :(
Danach hatte ich versucht mit
if(FileDetails.Thumbnail.Bitmap.Width != 256 && FileDetails.Thumbnail.Bitmap.Heigth != 256) aber mit diesem Code kann ich dann nicht mehr die Thumbnail der Videos sehen und auch manche Album Cover nicht mehr :(
Weißt jemand eine Lösung für die 2 Probleme ?
Grüße BleachRukia
jaenicke - So 19.06.11 19:10
BleachRukia hat folgendes geschrieben : |
hatte ich versucht die Dauer einer Musik/Video Datei anzuzeigen, nur leider wird mir das Ergebnnis, glaube ich, in Nanosekunden angezeigt :( |
Wie du in der Dokumentation ja sicher nachgelesen hast (:roll:) sind es 100ns Schritte:
Das musst du also nur umrechnen. ;-)
Delete - Mo 20.06.11 14:03
Hallo Leute,
mir ist aufgefallen das z.b. MKV Dateien in ihren Details keine Bitrate aufgelistet haben, also kann ich mir die auch nicht anzeigen lassen, und bei FLV Dateien werden überhaupt keine Video Informationen angezeigt :(
Weiß jemand wie ich bestimmte Informationen direkt aus einer ausgewählten Datei auslesen kann ?
Grüße BleachRukia
jaenicke - Mo 20.06.11 14:31
Da musst du dir die Definition des Dateiformats anschauen und das entsprechend umsetzen.
Für MKV z.B.:
http://www.matroska.org/technical/specs/index.html
Aber da reicht eine kurze Suche bei Google...
Ein Grund, dass keine Bitrate angezeigt wird, kann sein, dass diese variabel ist und keine festen Grenzen hat.
Delete - Mo 20.06.11 14:36
Hallo,
vielen vielen dank für die Antwort, nur wie setzt man sowas um, habe sowas voher noch nie gemacht, kannst du mir ein Code Beispiel geben ?
Grüße BleachRukia
Delete - Mo 20.06.11 16:54
Hallo,
wenn ich versuche eine Datei zu lesen bekomme ich in der while Schleife bei br.PeekChar() folgende Fehlermeldung:
Der Ausgabe-Zeichenpuffer zu klein für die codierten Zeichen. Codierung von "Unicode (UTF-8)" in Ausweichposition "System.Text.DecoderReplacementFallback".
Parametername: chars
Habe versucht die Datei in einer richtextbox anzuzeigen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| OpenFileDialog o = new OpenFileDialog(); if (o.ShowDialog() == DialogResult.OK) { string FILE_NAME = o.FileName;
if (!File.Exists(FILE_NAME)) { return; } FileStream f = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read, FileShare.Read); using (BinaryReader br = new BinaryReader(f)) { byte input; while (br.PeekChar() > -1) { input = br.ReadByte(); richTextBox1.Text += input; } } |
Was mache ich falsch ?
Grüße BleachRukia
Kha - Mo 20.06.11 17:18
Da haben die MSDN-Leute wohl nicht weit genug gedacht :lol: . Du solltest stattdessen auf Position und Length von f prüfen können.
Delete - Mo 20.06.11 17:35
Hallo Leute,
habe es jetzt auf Position/Length prüfen lassen, da kommen am Anfang nur ganz viele verschiedne Zahlen und danach ist das Programm für eine ganze Zeit nicht mehr ansprechbar aber am Ende bekomme ich diese Fehlermeldung:
Die CLR konnte 60 Sekunden lang keinen Übergang vom COM-Kontext 0x4567b8 zum COM-Kontext 0x456928 durchführen. Der Thread, der Besitzer des Zielkontexts/-apartments ist, wartet entweder, ohne Meldungen zu verschieben, oder verarbeitet eine äußerst lang dauernde Operation, ohne Windows-Meldungen zu verschieben. Eine solche Situation beeinträchtigt in der Regel die Leistung und kann sogar dazu führen, dass die Anwendung nicht mehr reagiert oder die Speicherauslastung immer weiter zunimmt. Zur Vermeidung dieses Problems sollten alle STA-Threads (Singlethread-Apartment) primitive Typen verwenden, die beim Warten Meldungen verschieben (z.B. CoWaitForMultipleHandles), und bei lange dauernden Operationen generell Meldungen verschieben.
Habe es mit diesme Code versucht gehabt:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| OpenFileDialog o = new OpenFileDialog(); if (o.ShowDialog() == DialogResult.OK) { string FILE_NAME = o.FileName;
if (!File.Exists(FILE_NAME)) { return; } FileStream f = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read, FileShare.Read); using (BinaryReader br = new BinaryReader(f)) { byte input; while (br.BaseStream.Position > -1) { input = br.ReadByte(); richTextBox1.Text += input; } } } |
Aber ich wollte ja eigentlich nur Infos zur Datei rausfiltern wie z.b bei Bilder/Video die Breite und Höhe, ich weiß das geht auch über die pBox aber ich wollte einzelne Infos direkt aus der Datei rauslesen.
Grüße BleachRukia
Th69 - Mo 20.06.11 18:06
Hallo BleachRukia,
schöne Endlosschleife ;-)
So ist es von Kha gedacht:
C#-Quelltext
1:
| while (br.BaseStream.Position < br.BaseStream.Length) |
Delete - Mo 20.06.11 18:28
Hallo,
habe es jetzt so geändert wie Kha es sich gedacht hat nur das Ergebniss bleibt leider das selbe :(, bekomme wieder nur Zahlen und nach sehr lange Zeit diese Fehlermeldung:
Die CLR konnte 60 Sekunden lang keinen Übergang vom COM-Kontext 0x122ed8 zum COM-Kontext 0x123048 durchführen. Der Thread, der Besitzer des Zielkontexts/-apartments ist, wartet entweder, ohne Meldungen zu verschieben, oder verarbeitet eine äußerst lang dauernde Operation, ohne Windows-Meldungen zu verschieben. Eine solche Situation beeinträchtigt in der Regel die Leistung und kann sogar dazu führen, dass die Anwendung nicht mehr reagiert oder die Speicherauslastung immer weiter zunimmt. Zur Vermeidung dieses Problems sollten alle STA-Threads (Singlethread-Apartment) primitive Typen verwenden, die beim Warten Meldungen verschieben (z.B. CoWaitForMultipleHandles), und bei lange dauernden Operationen generell Meldungen verschieben.
Diesmal war es dieser Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| OpenFileDialog o = new OpenFileDialog(); if (o.ShowDialog() == DialogResult.OK) { string FILE_NAME = o.FileName;
if (!File.Exists(FILE_NAME)) { return; } FileStream f = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read, FileShare.Read); using (BinaryReader br = new BinaryReader(f)) { byte input; while (br.BaseStream.Position < br.BaseStream.Length) { input = br.ReadByte(); richTextBox1.Text += input; } } } |
Grüße BleachRukia
jaenicke - Mo 20.06.11 18:49
BleachRukia hat folgendes geschrieben : |
bekomme wieder nur Zahlen |
Wieso nur? Das ist der Dateiinhalt in Asciicodes. :nixweiss:
Dass du die einzelnen Zeichencodes nicht trennst, ist natürlich dabei wenig sinnvoll.
Vergleiche das einfach mit einem Hexeditor, hexadezimal dargestellt steht da das gleiche.
BleachRukia hat folgendes geschrieben : |
und nach sehr lange Zeit diese Fehlermeldung: |
Was passiert denn, wenn du in die Schleife einen haltepunkt setzt? Ändert sich die Positionsangabe denn? Sonst ist das nach wie vor eine Endlosschleife.
Delete - Mo 20.06.11 19:25
jaenicke hat folgendes geschrieben : |
BleachRukia hat folgendes geschrieben : | bekomme wieder nur Zahlen | Wieso nur? Das ist der Dateiinhalt in Asciicodes. :nixweiss:
Dass du die einzelnen Zeichencodes nicht trennst, ist natürlich dabei wenig sinnvoll.
Vergleiche das einfach mit einem Hexeditor, hexadezimal dargestellt steht da das gleiche.
BleachRukia hat folgendes geschrieben : | und nach sehr lange Zeit diese Fehlermeldung: | Was passiert denn, wenn du in die Schleife einen haltepunkt setzt? Ändert sich die Positionsangabe denn? Sonst ist das nach wie vor eine Endlosschleife. |
Hallo,
von Hexeditor, hexadezimal habe ich mal gelesen gehabt aber habe überhaupt keine Erfahrung damit.
Habe einen Haltepunkt in die Schleife gesetzt, das Programm gestartet, danach eine Datei ausgewählt, jetzt fügt das Programm garnichts mehr in die richtextbox ein und halt beim Punkt an.
Gibt es da nicht sowas wie wenn ich eine Datei auswähle, und dann soetwas wie einen Suchbegriff eingebe,
wie z.b. suche mir den Artist der aus der ausgewählten Datei heraus ?
Grüße BleachRukia
jaenicke - Mo 20.06.11 20:00
Ja, dann hält das Programm dort an. Und dann kannst du mit F11 schrittweise durchgehen und schauen was passiert. ;-)
Und zur letzten Frage: Es mag da etwas geben, aber irgendjemand muss es dann auch schon geschrieben haben. Von alleine kommt das nicht.
Ob es da etwas Passendes gibt, weiß ich nicht, aber wenn wäre es bei Google zu finden.
Delete - Mo 20.06.11 21:16
Hallo,
bin das jetzt durchgegangen mit F11 und wie es aussieht bin ich wieder in einer Endlosschleife gelandet :(
Zitat: |
Und zur letzten Frage: Es mag da etwas geben, aber irgendjemand muss es dann auch schon geschrieben haben. Von alleine kommt das nicht.
Ob es da etwas Passendes gibt, weiß ich nicht, aber wenn wäre es bei Google zu finden.
|
Weiß jemand wie man so etwas schreiben kann ?
Grüße BleachRukia
jaenicke - Mo 20.06.11 22:00
Also bei mir funktioniert der Code problemlos. Allerdings kann es natürlich auch eine Weile dauern, denn so viele Daten byteweise auszulesen dauert halt... und wenn die dann noch als Text in ein RichEdit kommen sollen... :shock:
Nimm dir einfach eine kleinere Datei oder lies nur die ersten X Bytes, mehr brauchst du doch ohnehin nicht. Abgesehen davon:
Im Debugger siehst du ja auch wie weit der Vorgang ist. Du müsstest nur halt mal hinschauen (bzw. die Maus über Position usw. halten...):
Du siehst hier z.B., dass die aktuelle Position 7803 ist.
jaenicke - Mo 20.06.11 22:02
// EDIT: Doppelpost
Kha - Mo 20.06.11 22:35
Eine Endlosschleife wird ReadByte übrigens sowieso nicht zulassen ;) . Es passiert einfach das, was in der Fehlermeldung steht: Der GUI-Thread ist zu lange blockiert, was am zeichenweisen Aufaddieren auf Text liegen wird.
Delete - Di 21.06.11 00:33
Hallo,
habe mir jetzt mal die ersten 20 Zaheln getrennt in der rbox anzeigen lassen und danach durch einen Ascii übersetzer gejagt, da kommt auch nur Blödsinn bei raus, so langsam glaube ich nicht mehr das man mit diesem Code tatsächlich einzelne verständliche Informationen rausfiltern und anzeigen kann :(
jaenicke - Di 21.06.11 07:30
Was willst du mit Ascii? Denkst du in der Datei steht als Text drin was für Informationen in dem Video stehen? Dann wäre die Datei hundertmal so groß...
Das sind einfach nur einzelne Bytes, die z.B. als Zahlen interpretiert werden müssen. Was genau welches Byte heißt, steht ja in der Spezifikation des entsprechenden Dateityps, wie in dem Link zum MKV Format oben.
Delete - Di 21.06.11 22:07
Hallo Leute,
vielen vielen dank erst einmal für die vielen Antworten und die Geduld, merke aber das das rauslesen von Infos aus Dateien direkt, doch noch zu schwer für mich ist,
werde bei dem Windows API Code Pack das mir Kha empfohlen hat bleiben, vielen dank nochmal Kha :)
jaenicke dir möchte ich auch noch einmal danken, dafür das du dir die Zeit genommen hast und versucht hast es mir zu erklären :)
Liebe Grüße BleachRukia
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!