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
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/
"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?
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.
"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
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....
"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