Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Dateiinfo einer Datei

50 views
Skip to first unread message

Mario Jungwirth

unread,
Jan 29, 2003, 8:01:02 AM1/29/03
to
Hallo NG

Ich habe mit eine Intranetseite gebaut die mir verschiede Verzeichnisse
listet (und deren Dateien)
Wenn ich in Windows XP nun eine AVI Datei anklicke und auf
Eigenschaften/Dateiinfo gehe dann wird mir die
Audiobittrate/Videokomprimierung angezeigt

Wie kann ich diese in c# ermitteln?

mfg Mario Jungwirth

Thomas Scheidegger [MVP] NETMaster

unread,
Jan 29, 2003, 9:35:24 AM1/29/03
to
Diese Informationen werden von der Windows-Shell
explizit ausgewertet,
und sind nicht direkt in .NET abrufbar.

Daher muss man entweder
- die (COM-) Schnittstellen der Windows-Shell per Interop benutzen,
- oder für das AVI Dateiformat binär selber auswerten.


--
Thomas Scheidegger - MVP .NET - 'NETMaster'
http://www.cetus-links.org/oo_dotnet.html - http://dnetmaster.net/


Mario Jungwirth

unread,
Jan 29, 2003, 10:40:42 AM1/29/03
to

"Thomas Scheidegger [MVP] NETMaster" <spam.ne...@swissonline.ch> schrieb
im Newsbeitrag news:egVsdO6xCHA.1656@TK2MSFTNGP09...

Hallo Thomas

Danke

Aber hast du vielleicht eine Beschreibung der Windows Shell Schnittstelle
oder vielleicht eine Ahnung wie man die AVI DAtei binär auslesen kann?


Thomas Scheidegger [MVP] NETMaster

unread,
Jan 29, 2003, 11:27:53 AM1/29/03
to
> wie man die AVI DAtei binär auslesen kann?


Die Theorie: "AVI RIFF File Reference"
http://msdn.microsoft.com/library/en-us/directx9_c/directx/htm/avirifffilereference.asp


z.B. "AVIMAINHEADER Structure"
http://msdn.microsoft.com/library/en-us/directx9_c/directx/htm/avimainheaderstructure.asp

Und Google fand (ohne Gewähr)
http://i31www.ira.uka.de/docs/semin94/05_AVI/main_html.html
http://www.fourcc.org/


Es gibt sicherlich tausende C++ Source im Web
für RIFF-Dateistrukturen....


in .NET wie gesagt ist all dies nicht drin, daher
müsste man z.B. mit der Low-Level 'BinaryReader' Klasse
alle Felder binär auslesen...

> Beschreibung der Windows Shell Schnittstelle

evtl. auch über das 'alte' VfW - API, etwa 'AVIFileInfo',
hier ein VB6 Bsp:
http://www.mvps.org/vbnet/index.html?code/avi/avifileinfo.htm

=> Da in .NET nichts drin, empfehle ich daher erst eine
gut C++/Win32/VB6 Lösung zu suchen, zu verstehen,
und dann portieren.

Herfried K. Wagner

unread,
Jan 29, 2003, 12:40:56 PM1/29/03
to
Hallo Mario!

"Mario Jungwirth" <m...@webgin.at> schrieb:


> > Daher muss man entweder
> > - die (COM-) Schnittstellen der Windows-Shell per Interop benutzen,
> > - oder für das AVI Dateiformat binär selber auswerten.

Eventuell kannst du hiermit (VBScript-Code) etwas anfagen. Ich habe aber
nicht getestet, ob man damit auch an die interessanten Informationen kommt.
Bei Bitmaps kann man so u.a. auch die Masse ermitteln, also einen Versuch
ist es wert. Das Ganze muss man dann eben noch "konvertieren".

\\\
Dim arrHeaders(34)
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("C:\Windows\")
For i = 0 to 33
arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i)
Next
For Each strFileName in objFolder.Items
If strFilename = "Granit.bmp" Then
For i = 0 to 33
Wscript.echo i & vbtab & arrHeaders(i) _
& ": " & objFolder.GetDetailsOf(strFileName, i)
Next
End If
Next
///

Grüsse,
Herfried K. Wagner


Thomas Scheidegger [MVP] NETMaster

unread,
Jan 29, 2003, 1:14:35 PM1/29/03
to
Dies wäre hier

http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/objects/folder/getdetailsof.asp


und in VS.NET eine COM-Referenz auf
"Microsoft Shell Controls and Automation" (shell32.dll)

und C# Code:

using System.IO;
using Shell32;
...
string path = @"C:\WINDOWS\clock.avi";

ShellClass sh = new ShellClass();
Folder dir = sh.NameSpace( Path.GetDirectoryName( path ) );
FolderItem item = dir.ParseName( Path.GetFileName( path ) );
for( int i = 0; i < 30; i++ )
{
string det = dir.GetDetailsOf( item, i );
Console.WriteLine( "ID {0} = {1}", i, det );
}


ergibt:

ID 0 = clock.avi
ID 1 = 81 KB
ID 2 = Video Clip
ID 3 = 2003-01-29 16:05
ID 4 = 2001-08-23 15:00
ID 5 = 2003-01-29 16:05
ID 6 = A
ID 7 = Online
ID 21 = 00:00:12
ID 22 = 8kbps
ID 26 = 321 x 321
ID 27 = 321 pixels
ID 28 = 321 pixels


ich bin mir aber nicht so sicher,
wie robust dieser Ansatz ist....

Herfried K. Wagner

unread,
Jan 29, 2003, 1:21:10 PM1/29/03
to
Hallo Thomas!

"Thomas Scheidegger [MVP] NETMaster" <spam.ne...@swissonline.ch>

schrieb:


> ergibt:
>
> ID 0 = clock.avi
> ID 1 = 81 KB
> ID 2 = Video Clip
> ID 3 = 2003-01-29 16:05
> ID 4 = 2001-08-23 15:00
> ID 5 = 2003-01-29 16:05
> ID 6 = A
> ID 7 = Online
> ID 21 = 00:00:12
> ID 22 = 8kbps
> ID 26 = 321 x 321
> ID 27 = 321 pixels
> ID 28 = 321 pixels

Der Vorteil im Gegensatz zum Auslesen der Informationen durch Analyse des
Dateiheaders liegt darin, dass er bei allen Dateiformaten, die solche
Zusatzdaten anbieten, funktionieren sollte.

> ich bin mir aber nicht so sicher,
> wie robust dieser Ansatz ist....

Aufgrund meiner Abneigung gegen COM-Komponenten in .NET-Projekten würde ich
es nicht einsetzen, wenn es etwas einfacheres und stabileres gibt. Ab und zu
geht es aber darum, überhaupt einmal eine Lösung zu finden...

Grüsse,
Herfried K. Wagner


0 new messages