Microsoft KB Archive/168439

From BetaArchive Wiki
Knowledge Base


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

Article ID: 168439

Article Last Modified on 9/7/2005



APPLIES TO

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



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


Keywords: kbtshoot kbprb KB168439