Autor Beitrag
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 user profile iconChristian S.: Topic aus WinForms verschoben am Di 14.06.2011 um 14:59
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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



BeitragVerfasst: 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



BeitragVerfasst: Di 14.06.11 14:46 
Was sind denn für die ALLE Informationen?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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



BeitragVerfasst: 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 :)
ausblenden 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 user profile iconKha: C#-Tags hinzugefügt
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:

ausblenden 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 19.06.11 19:10 
user profile iconBleachRukia hat folgendes geschrieben Zum zitierten Posting springen:
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:
MSDN Dokumentation hat folgendes geschrieben:
Represents the actual play time of a media file and is measured in 100ns units, not milliseconds.
Das musst du also nur umrechnen. ;-)
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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



BeitragVerfasst: 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:
ausblenden 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);
                // Create an instance of BinaryReader that can
                // read bytes from the FileStream.
                using (BinaryReader br = new BinaryReader(f))
                {
                    byte input;
                    // While not at the end of the file, read lines from the file.
                    while (br.PeekChar() > -1)
                    {
                        input = br.ReadByte();
                        richTextBox1.Text += input;
                    }
                }

Was mache ich falsch ?

Grüße BleachRukia
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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.

_________________
>λ=
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:

ausblenden 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);
                // Create an instance of BinaryReader that can
                // read bytes from the FileStream.
                using (BinaryReader br = new BinaryReader(f))
                {
                    byte input;
                    // While not at the end of the file, read lines from the file.
                    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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 20.06.11 18:06 
Hallo BleachRukia,

schöne Endlosschleife ;-)

So ist es von Kha gedacht:
ausblenden C#-Quelltext
1:
while (br.BaseStream.Position < br.BaseStream.Length)					
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:

ausblenden 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);
                // Create an instance of BinaryReader that can
                // read bytes from the FileStream.
                using (BinaryReader br = new BinaryReader(f))
                {
                    byte input;
                    // While not at the end of the file, read lines from the file.
                    while (br.BaseStream.Position < br.BaseStream.Length)
                    {
                        input = br.ReadByte();
                        richTextBox1.Text += input;
                    }
                }
            }


Grüße BleachRukia
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 20.06.11 18:49 
user profile iconBleachRukia hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconBleachRukia hat folgendes geschrieben Zum zitierten Posting springen:
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.