Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > FindFirstFile и FindNextFile на VB.NET


Автор: SFY 3.10.2007, 23:21
Итак, мне нужно:
В заданной директории найти все файлы или все папки, и загнать их все в массив. С этим идеально справляются функции Directory.GetFiles и Directory.GetDirectories НО! тоже самое нужно сделать, применяя API функции FindFirstFile (или FindFirstFileEx) и FindNextFile. И вот тут лыжи не едут...

Встал вопрос: это вообще возможно? 
Примеры на C# видел, а вот на VB.NET - ни одного. Если у кого-нибудь завалялось, буду очень признателен.


В чем возникла основная сложность?
Апишные функции уже применял, но, в основном те, где в качестве параметра передается string'овая константа и только (типа MoveFile).
Здесь же:

Код

HANDLE FindFirstFile(
  LPCTSTR lpFileName,
  LPWIN32_FIND_DATA lpFindFileData
);


Что делать с LPWIN32_FIND_DATA? Как ее определить и использовать?

Автор: Experimenter 4.10.2007, 11:00
А импортировать апишные функции не пробовал?

Виноват, вижу, что пробовал...

Добавлено через 11 минут и 32 секунды
Тогда посмотри в МСДН (ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_fxinterop/html/625c3214-8692-40b8-817f-2fd2498846da.htm):
или http://msdn2.microsoft.com/en-us/library/3k3z0k7a(vs.71).aspx
Код

' Declares a class member for each structure element.
< StructLayout( LayoutKind.Sequential, CharSet := CharSet.Auto )> _
Public Class FindData
   Public fileAttributes As Integer = 0
   ' creationTime was a by-value FILETIME structure.
   Public creationTime_lowDateTime As Integer = 0
   Public creationTime_highDateTime As Integer = 0
   ' lastAccessTime was a by-value FILETIME structure.
   Public lastAccessTime_lowDateTime As Integer = 0
   Public lastAccessTime_highDateTime As Integer = 0
   ' lastWriteTime was a by-value FILETIME structure.
   Public lastWriteTime_lowDateTime As Integer = 0
   Public lastWriteTime_highDateTime As Integer = 0
   Public nFileSizeHigh As Integer = 0
   Public nFileSizeLow As Integer = 0
   Public dwReserved0 As Integer = 0
   Public dwReserved1 As Integer = 0
   < MarshalAs( UnmanagedType.ByValTStr, SizeConst := 256 )> _
   Public fileName As String = Nothing
   < MarshalAs( UnmanagedType.ByValTStr, SizeConst := 14 )> _
   Public alternateFileName As String = Nothing
End Class 'FindData

Public Class LibWrap
   ' Declares a managed prototype for the unmanaged function.
   Declare Auto Function FindFirstFile Lib "Kernel32.dll" _
      ( ByVal fileName As String, <[In], Out> ByVal findFileData As _
      FindData ) As IntPtr
End Class 'LibWrap

Поиск тебе поможет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)