FIX: CFile::GetFileName() Always Returns CString w/Zero Length

ID: Q143086


The information in this article applies to:
  • The Microsoft Foundation Classes (MFC), included with:
    • Microsoft Visual C++, 32-bit Editions, version 4.0


SYMPTOMS

If you call CFile::GetFileName(), it will return a CString with the correct file name. However, if you call GetLength() on the CString, it will return 0.


CAUSE

The MFC function CFile::GetFileName() writes directly to the CString's character pointer. However, it doesn't set the CString's size before returning from this function.


RESOLUTION

Call CString::ReleaseBuffer() after calling CFile::GetFileName().


STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug was corrected in Visual C++ 4.1.


MORE INFORMATION

Sample Code


void CTestDoc::Serialize(CArchive& ar)
{
   if (ar.IsStoring())
   {
      // TODO: add storing code here
   }
   else
   {
      CFile* fp = ar.GetFile ();
      ASSERT (fp);
      CString fname = fp->GetFileName ();
      // this line is needed to set the size of CString
      fname.ReleaseBuffer ();
      int nLength = fname.GetLength();
   }
} 

Additional query words: kbVC400bug 4.00 4.10 GetFileName GetLength CFile CString

Keywords : kbMFC KbUIDesign kbVC kbVC410fix
Version : 4.00
Platform : NT WINDOWS
Issue type :


Last Reviewed: July 22, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.