Microsoft KB Archive/251427

From BetaArchive Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

BUG: GetDiskFreeSpaceEx() Fails with Error 123 When it Is Passed a Subdirectory Containing Two (or More) Periods

Q251427



The information in this article applies to:


  • Microsoft Win32 Application Programming Interface (API), included with:
    • Microsoft Windows 95
    • Microsoft Windows 98
    • Microsoft Windows 98 Second Edition





SYMPTOMS

The GetDiskFreeSpaceEx function fails and the GetLastError function reports Error 123 when the GetDiskFreeSpaceEx function is called by using a directory name that contains more than a single period, such as "c:\v3.2.1" (assume that v3.2.1 exists).

If the GetDiskFreeSpaceEx function is called by using the short name (that is, "c:\v32~1"), the problem still occurs.



RESOLUTION

To work around this problem, avoid using more than one period in a directory name. For example, replace periods in directory names with dashes. Instead of naming a directory "v3.2.1", name the directory "v3_2_1".



STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article.



MORE INFORMATION

Steps to Reproduce Behavior

  1. Type md c:\v3.2.1 at a command-line prompt.
  2. Run the sample code with the "c:\v3.2.1" parameter. Note that Error 123 is returned.
  3. Run the code by using the short directory name (for example, "c:\v32~1") and notice that Error 123 is returned in this case as well.

Sample Code

#include <windows.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
    ULARGE_INTEGER  ulTotalSpace;
    ULARGE_INTEGER  ulUserSpace;
    ULARGE_INTEGER  ulFreeSpace;
    LPSTR lpDirectoryName = "c:";

    if(argc > 1)
        lpDirectoryName = argv[1];

    if(GetDiskFreeSpaceEx(lpDirectoryName, &ulUserSpace, &ulTotalSpace, &ulFreeSpace) == TRUE){
        printf("User Space  = %I64u\n", ulUserSpace.QuadPart);
        printf("Total Space = %I64u\n", ulTotalSpace.QuadPart);
        printf("Free Space  = %I64u\n", ulFreeSpace.QuadPart);
    }
    else
    {
        printf("error occurred %u\n", GetLastError());
    }

    return 0;
}
 

Additional query words:

Keywords : kbAPI kbFileIO kbKernBase kbOSWin95 kbOSWin98 kbDSupport kbGrpDSKernBase
Issue type : kbbug
Technology : kbAudDeveloper kbWin32sSearch kbWin32API


Last Reviewed: December 16, 2000
© 2001 Microsoft Corporation. All rights reserved. Terms of Use.