zk96 писал(а) 04. Июня 2011 :: 17:29:О
! Оказывается я ввел в заблюждение. Написал раньше ОткрытьФайл, вместо ВыбратьФайл.
А, ясно. А я думаю, причем тут XBase?
Тут, судя по всему, 1С стала заложником MS, а точнее - реализации класса CFileDialog в MFC.
Для получения имени файла в 1С используется функция CFileDialog::GetFileName():
Цитата:CString CFileDialog::GetFileName() const
{
if ((m_ofn.Flags & OFN_EXPLORER) && m_hWnd != NULL)
{
ASSERT(::IsWindow(m_hWnd));
CString strResult;
if (GetParent()->SendMessage(CDM_GETSPEC, (WPARAM)MAX_PATH,
(LPARAM)strResult.GetBuffer(MAX_PATH)) < 0)
{
strResult.Empty();
}
else
{
strResult.ReleaseBuffer();
return strResult;
}
}
return m_ofn.lpstrFileTitle;
}
А длина
lpstrFileTitle ограничена 64 символами by design в самом CFileDialog.
Т.е., видимо, для получения имени файла нельзя пользоваться GetFileName(), а нужно отрезать имя файла от GetPathName().
ОК, я подумаю, как это можно исправить универсально.