Установка текущего пути в CFileDialog

Модераторы: Romeo, Hawk, Absurd, WinMain, DeeJayC

Ответить
_SG
Сообщения: 52
Зарегистрирован: 28 фев 2009, 10:43
Откуда: Севастополь

Установка текущего пути в CFileDialog

Сообщение _SG » 11 мар 2009, 23:38

Уважаемый All, подскажи, как в CFileDialog установить папку, откуда запущена программа? ниже код - пихал текущий путь в "имя файла".
Работает через раз и в строке "имя файла" всякая муть отображается (ну тут есть мысли как очистить, но внимательно выслушаю полезные советы и по этому поводу)

Код: Выделить всё

//получаем имя обрабатываемого файла
void CTableConvert_3Dlg::OnBnClickedButton1(){
// TODO: добавьте свой код обработчика уведомлений
	char tmp1[MAX_PATH];
	char tmp2[MAX_PATH];
//получаем текущую директорию и настраиваем полученную строку под этот долбанный C -
//добавляем после '\' ещё одну '\'
    GetCurrentDirectory(MAX_PATH,(LPWSTR)tmp1); 
//	CString str((LPWSTR)(tmp));
	WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK, (LPWSTR)tmp1, -1, tmp2,
		sizeof(tmp2),NULL, NULL);
	int i=0,j=0;
	for(;tmp2[i];i++,j++){
	  tmp1[j]=tmp2[i];
	  if(tmp2[i]=='\\')tmp1[++j]='\\';
	}
	tmp1[j++]='\\';tmp1[j++]='\\';tmp1[j]=0;
	CFileDialog ifd(TRUE,NULL, (LPCTSTR)tmp1);
	ifd.DoModal();
	ifile=ifd.GetFileName();
}

BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

Re: Установка текущего пути в CFileDialog

Сообщение BBB » 12 мар 2009, 10:02

_SG писал(а)://получаем текущую директорию и настраиваем полученную строку под этот долбанный C -
//добавляем после '\' ещё одну '\'
int i=0,j=0;
for(;tmp2;i++,j++){
tmp1[j]=tmp2;
if(tmp2=='\\')tmp1[++j]='\\';
}
Это называется "перемудрил". Не надо ничего этого делать.

Аватара пользователя
WinMain
Сообщения: 912
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Re: Установка текущего пути в CFileDialog

Сообщение WinMain » 12 мар 2009, 19:25

Работает через раз и в строке "имя файла" всякая муть отображается
Удивительно как такой код вообще работает. Могу лишь представить себе как выглядит остальной код в проекте...
Вот как это делается:

Код: Выделить всё

	TCHAR szPath[MAX_PATH];
	::GetCurrentDirectory(MAX_PATH, szPath);
	CFileDialog dlg(TRUE);
	dlg.m_ofn.lpstrInitialDir = szPath;
	dlg.m_ofn.lpstrFilter = 
			_T("Текстовые файлы (*.txt)\0*.txt*\0")
			_T("Все файлы (*.*)\0*.*\0");
	dlg.DoModal();
Приглашаю на свой сайт http://winmain.org

_SG
Сообщения: 52
Зарегистрирован: 28 фев 2009, 10:43
Откуда: Севастополь

Re: Установка текущего пути в CFileDialog

Сообщение _SG » 12 мар 2009, 20:58

Всё гениальное просто) Недомучал MSDN. Спасибо, WinMain. Кстати,
"The following is a list of the members that are not supported by Windows Vista:
lpstrCustomFilter
lpstrInitialDir...."

Мне немного стыдно было такой код было показывать, но последний раз кодил 4 года назад (если там приведения типов поубирать, может и моё заработает как надо). Делал всё средствами API, а сейчас решил и MFC, и стандартные библиотеки С++ поглядеть. А это двухбайтовые строки меня вообще корёжат((.

Только тыкать носом в ошибки тоже некрасиво, имхо.

Ответить