Problem mit Vista und externer Methode "FindFirstFile"

01/12/2008 - 14:31 von Carsten Ilwig | Report spam
Hallo Leute,

unter Vista bekomme ich bei folgendem Code einen Fehler:

private static extern IntPtr FindFirstFile(string lpFileName, out
iWIN32_FIND_DATA lpFindFileData);
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
internal struct iWIN32_FIND_DATA
{
internal FileAttributes dwFileAttributes;
internal iFILETIME ftCreationTime;
internal iFILETIME ftLastAccessTime;
internal iFILETIME ftLastWriteTime;
internal int nFileSizeHigh;
internal int nFileSizeLow;
internal int dwReserved0;
internal int dwReserved1;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst =
CommonFileSystemProperties.MaxPathLength)]
internal string cFileName;
}

private void findFirstFile(string _directory)
{
iWIN32_FIND_DATA _findData;
IntPtr _findHandle = FindFirstFile(_directory, out _findData); //Bei
diesem Aufruf kommt der u.g. Fehler.
...
}
Fehler:
Die Laufzeit hat einen schwerwiegenden Fehler entdeckt.
Fehleradresse: "0x79e7e5a6" in Thread "0x1730". Fehlercode: 0xc0000005.
Bei diesem Fehler könnte es sich um ein Problem in der CLR oder
in den unsicheren oder nicht verifizierbaren Teilen des Benutzercodes
handeln.
Übliche Ursachen dieses Bugs sind Marshallerfehler für COM-Interop oder
PInvoke,
die den Stapel beschàdigen können.

Unter XP funktioniert es einwandfrei.

Wie kann ich erreichen, dass die Methode findFirstFile() auch unter Vista
funktioniert?


Vielen Dank für Eure Hilfe
Carsten
 

Lesen sie die antworten

#1 Frank Dzaebel
01/12/2008 - 15:04 | Warnen spam
Hallo Carsten,

unter Vista bekomme ich bei folgendem Code einen Fehler:
private static extern IntPtr FindFirstFile(string lpFileName, out
iWIN32_FIND_DATA lpFindFileData);



kurz überflogen ... bei Deinem iWIN32_FIND_DATA struct
(bitte gemàss Richtlinien benennen) fehlt zum Beispiel:
[MarshalAs(UnmanagedType.ByValTStr,
SizeConst=MAX_ALTERNATE)]
public string cAlternate;

[WIN32_FIND_DATA Structure (Windows)]
http://msdn.microsoft.com/en-us/lib...65740.aspx

[pinvoke.net: FindFirstFile (kernel32)]
http://www.pinvoke.net/default.aspx...tFile.html

Wobei man eigentlich zusàtzlich die
Reparse Points mit berücksichtigen sollte.

[CodeProject: Reparse Points in Vista]
http://www.codeproject.com/KB/vista...intID.aspx

[How to loop through all files in a folder using C# - Ohad's Blog]
http://weblogs.asp.net/israelio/arc...62913.aspx

http://groups.google.com/group/micr...de50b0f350

________________________
Man fragt sich natürlich, warum Du nicht
Directory.GetFiles o.à. benutzt, aber gut, es
gibt da Szenarien.

[SO WIRD'S GEMACHT: Rekursives Durchsuchen von Verzeichnissen mit
C# .NET]
http://support.microsoft.com/kb/303974/de


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen