Autor |
Beitrag |
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 14.06.11 11:10
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
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 14.06.11 11:44
Hallo,
es gibt noch die FileVersionInfo-Klasse, welche weitere Eigenschaften beinhaltet.
Und dann gibt es auch noch die Folder.GetDetailsOf-Methode (ein Beispiel habe ich unter www.mycsharp.de/wbb2...d.php?threadid=75863 gefunden).
|
|
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 14.06.11 14:46
Was sind denn für die ALLE Informationen?
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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. 
|
|
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mi 15.06.11 13:22
Ab Vista sollten all diese Eigenschaften über die neue Shell-API abgefragt werden können. .NET-Bindings dafür gibt es im Windows API Code Pack, damit habe ich z.B. Musik-Bewertungen unabhängig vom Container ausgelesen.
_________________ >λ=
|
|
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 18.06.11 23:27
|
|
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 19.06.11 19:10
|
|
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 20.06.11 14:31
Da musst du dir die Definition des Dateiformats anschauen und das entsprechend umsetzen.
Für MKV z.B.:
www.matroska.org/tec...cal/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.
|
|
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 20.06.11 14:45
Hier findest du ein Beispiel:
msdn.microsoft.com/d...ibrary/e4y2dch9.aspx
In diesem Fall brauchst du das zweite Beispiel mit dem BinaryReader.
|
|
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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-  " 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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mo 20.06.11 17:18
Da haben die MSDN-Leute wohl nicht weit genug gedacht  . Du solltest stattdessen auf Position und Length von f prüfen können.
_________________ >λ=
|
|
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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) |
|
|
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 20.06.11 18:49
BleachRukia hat folgendes geschrieben : | bekomme wieder nur Zahlen |
Wieso nur? Das ist der Dateiinhalt in Asciicodes.
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.
|
|
|