![]() |
|
|
![]()
|
|
| satellite |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
Открываю файл, получаю буфер с названиями файлов:
CFileDialog Dialog(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT); Dialog.m_ofn.nMaxFile = 100; Dialog.m_ofn.lpstrFile = FullName.GetBuffer(100); //FullName типа CString Dialog.DoModal(); FullName.ReleaseBuffer(); В FullName по идее строка с именами файлов, разделенными NULL. Пытаюсь вставить вместо NULL перевод строки: for (int i = 1; i <FullName.GetLength(); i++) //цикл с 1 до длины FullName { buffer = FullName.GetAt(i); //buffer типа CString, получение символа if ( buffer == NULL) FullName.SetAt (i, '\n'); //сравнение символа с NULL } компилируется без проблем, но после запуска программа прерывается и выскакивает ошибка, и именно из-за NULL как я понял. Что я неправильно делаю? Я начинающий, поэтому заранее прошу простить если туплю ))) |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 2 Всего: 146 |
разве? а не разделены они переводом строк? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Чем ковыряться в возврщанной строке, проще использовать функции CFileDialog::GetStartPosition и GetNextPathName
-------------------- ... |
|||
|
||||
| satellite |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
Эти методы возвращают полный путь каждого выбранного файла, а мне нужны именно названия файлов. Каким образом выцепить из полного пути имя файла? Добавлено @ 19:59
Выдержка из MSDN: For Explorer-style dialog boxes, the directory and file name strings are NULL separated, with an extra NULL character after the last file name. For old-style dialog boxes, the strings are space separated Разделены NULL' ем ))) |
||||
|
|||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 2 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| satellite |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
Спасибо ребята, придется сделать именно так, но все-таки вопрос с NULL остается открытым ))
|
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 1 Всего: 10 |
satellite, У тебя buffer как определен?
Если что то типа char *buffer то строчка if ( buffer == NULL) будет проверять на что указывает указатель buffer. Если так char buffer[], то условие вообше не должно выполняться. Да там получается массив строк, разделенных между собой 0. Конец массива указан двумя нулями. -------------------- Пролетал мимо. |
|||
|
||||
| satellite |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
to Fin
buffer определен как CString, и в нем после работы диалога находится строка, я проверял, вот только разделена она, если смотреть в текстовом режиме - квадратиками )) ... |
|||
|
||||
| Fin |
|
||||||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 1 Всего: 10 |
satellite, Эээ символ с кодом 0 не имеет графического представления. Поэтому у тебя будут идти квадратики. Хотя я не совсем понял про текстовый режим. Это как?
Кстати NULL помоему в windows.h определен так
И при твоем определении
Такое сравнение
не корректно и не будет работать. -------------------- Пролетал мимо. |
||||||
|
|||||||
| satellite |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
Текстовым режимом я назвал вот что ))) я записал содержимое buffer в текстовый файл с помощью WRITE примерно так:
CFile MyFile; MyFile.Write(buffer, buffer.GetLength()); После этого в текстовом файле оказались имена файлов, разделенные именно квадратиками ))) Т.е. в buffer находится имеено то, что мне надо, но только я не могу оттуда это достать ))) Кстати, насчет использования GetStartPosition() и GetNextPathName(pos). я написал функцию, которая выделяла имена файлов из полного пути,все вроде бы получилось отлично, но..... При попытке выделить большое количество файлов эти методы работать отказываются, вот так. Поэтому придется все-таки через буфер так как его емкость можно увеличить с помощью m_ofn.nMaxFile |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |