Using the C Run-time function stat to check a directory fails when the name passed to the function ends with a backslash (\) (168439)



The information in this article applies to:

  • The C Run-Time (CRT), when used with:
    • Microsoft Visual C++, 32-bit Enterprise Edition 5.0
    • Microsoft Visual C++, 32-bit Enterprise Edition 6.0
    • Microsoft Visual C++, 32-bit Professional Edition 5.0
    • Microsoft Visual C++, 32-bit Professional Edition 6.0
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET (2002)
    • Microsoft Visual C++ .NET (2003)

This article was previously published under Q168439

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 behavior.
//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.
If you experience the C1010 error when you compile the sample code in Visual Studio .NET, click the following article number to view the article in the Microsoft Knowledge Base:

815644 Most common causes of C1010 error


Modification Type:MajorLast Reviewed:9/7/2005
Keywords:kbtshoot kbprb KB168439 kbAudDeveloper