Here's a version that attempts to use the W(ide) unicode api's, but I cannot work out the right syntax for passing the filespec to search for?
#! perl -slw use strict; use Win32::API::Prototype; ApiLink( 'Kernel32', q[ HANDLE FindFirstFileW( LPCTSTR lpFileName, LPW +IN32_FIND_DATA lpFindFileData )] ) or die $^E; ApiLink( 'Kernel32', q[ BOOL FindNextFileW( HANDLE hFindFile, LPWIN32_ +FIND_DATA lpFindFileData ) )] ) or die $^E; ApiLink( 'Kernel32', q[ HANDLE FindClose( HANDLE hFindDile )] ) or die + $^E; =pod typedef struct _WIN32_FIND_DATA { DWORD dwFileAttributes; # 4 FILETIME ftCreationTime; # 8 FILETIME ftLastAccessTime; # 8 FILETIME ftLastWriteTime; # 8 DWORD nFileSizeHigh; # 4 DWORD nFileSizeLow; # 4 DWORD dwReserved0; # 4 DWORD dwReserved1; # 4 TCHAR cFileName[MAX_PATH]; # 260 TCHAR cAlternateFileName[14]; # 14 } WIN32_FIND_DATA, # 328 *PWIN32_FIND_DATA; =cut my $FFData = chr(0) x 1024; ## Allow some extra room for long unicode +paths? ## See the MSDN docs for where the \\?\... syntax comes from ## It is recognising this syntax as without it I get ## The filename, directory name, or volume label syntax is incorrect ## And with it I get ## The system cannot find the file specified ## Which suggests that it can't file any file in the path I'm specifyi +ng ## but there are files there to be found. my $hFF = FindFirstFileW( '\\?\p:\test\*', $FFData ) > 0 or die $^E; ## Note: the > 0 test above Failure results in a -1 returncode. print $hFF; do { print unpack 'x44U*', $FFData; } while FindNextFileW( $hFF, $FFData ); __END__ P:\test>ffw The system cannot find the file specified at P:\test\FFW.pl line 27.
In reply to Re^5: Win32api::File and Directories
by BrowserUk
in thread Win32api::File and Directories
by Droid41
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |