PRB: _stat Function Fails for Names Ending with "\"
ID: Q168439
|
The information in this article applies to:
-
The C Run-Time (CRT), used with:
-
Microsoft Visual C++, 32-bit Editions, versions 5.0, 6.0
SYMPTOMS
Using the C-Run-time function stat to check a directory fails when the
name passed to the function ends with "\".
For example, _stat("\\my_directory\\my_name",&buf) returns OK, but
_stat("\\my_directory\\my_name\\",&buf) will return -1 as error.
CAUSE
The _stat function calls the windows API function FindFirstFile passing it
the path name. The FindFirstFile returns an invalid handle if the name ends
with "\."
RESOLUTION
Remove the trailing "\" from the path name.
STATUS
This behavior is by design.
MORE INFORMATION
The following sample program demonstrates the problem:
//Sample.cpp
/* Compiler Options : none */
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <windows.h>
HANDLE hSearch;
WIN32_FIND_DATA Buf;
int main( void )
{
struct _stat buf;
int result;
result = _stat( "c:\\temp", &buf );
if( result != 0 )
printf( "_stat function on c:\\temp failed " );
result = _stat( "c:\\temp\\", &buf );
if( result != 0 )
printf( "_stat function on c:\\temp\\ failed " );
hSearch= FindFirstFile((LPSTR)"c:\\temp", &Buf);
if (hSearch == INVALID_HANDLE_VALUE )
printf("\n\n FindFirstFile on c:\\temp failed too");
hSearch= FindFirstFile((LPSTR)"c:\\temp\\", &Buf);
if (hSearch == INVALID_HANDLE_VALUE )
printf("\n\n FindFirstFile on c:\\temp\\ failed too");
return 0;
}
Program Output:
If you have a valid C:\temp directory:
_stat function on c:\temp\ failed.
FindFirstFile on c:\temp\ failed, too.
REFERENCES
Online docs on _stat CRT function
mk:@ivt:vccore/F3F/F43/D4D/S4CF6A.HTM
Online docs on FindFirstFile API function
mk:@ivt:pdref/native/sdk/win32/func/src/f24_10.htm
Additional query words:
Keywords : kbCRT kbVC500 kbVC600
Version : winnt:5.0,6.0
Platform : winnt
Issue type : kbprb