Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 11.12.2015
Сообщений: 50

Как открыть текущую директорию? Как извлечь имя файла?

11.12.2015, 05:14. Показов 5279. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1) Как в OpenDialog1 использовать при открытии текущую директорию?
Привязывалось на OnClick кнопки
при
C++
1
SetCurrentDir(ExtractFilePath(Application->ExeName));
ничего не меняется

при
C++
1
2
3
AnsiString CD;
CD=GetCurrentDir();
OpenDialog1->InitialDir=CD;
тоже ничего

2) Как выцепить имя выбранного файла в открытом диалоговом окне, чтобы присвоить его переменной?
В итоге чтобы добавлять это имя в ListBox
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2015, 05:14
Ответы с готовыми решениями:

Как извлечь имя файла из URL
Добрый день! Имеется переменная $hhh1='http://site.ru/upload/iblock/4ab/18952b.JPG' или ...

Как из файла фонта извлечь его имя
Есть TTF-файл. Как средствами Си, Си++, WinApi узнать его имя (семейство)? типа "Courier New Bold" Добавлено через 2 минуты И...

Как определить текущую директорию?
Подскажите как определить путь к текущему каталогу из которого я запущен? Нагуглил только argv, но он дает путь к exe, а мне нужно к...

16
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
11.12.2015, 09:42
Strelok372,

C++
1
2
3
4
5
OpenDialog1->InitialDir = StringReplace(ExtractFileDir(ParamStr(0)), "\\.", "", TReplaceFlags() << rfReplaceAll);
if(OpenDialog1->Execute)
{
    // ...
}
, лишние \. в пути мешают коду отработать нормально, надо их удалять...
3
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
11.12.2015, 09:55
Лучший ответ Сообщение было отмечено Strelok372 как решение

Решение

1.
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenDialog1->Execute())
{
    Label1->Caption = OpenDialog1->FileName;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
OpenDialog1->InitialDir = (ExtractFileDir(Application->ExeName));
}
Добавлено через 5 минут
Цитата Сообщение от Strelok372 Посмотреть сообщение
2) Как выцепить имя выбранного файла в открытом диалоговом окне, чтобы присвоить его переменной?
В итоге чтобы добавлять это имя в ListBox
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenDialog1->Execute())
{
    ListBox1->Items->Add(ExtractFileName(OpenDialog1->FileName));
}
}
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
11.12.2015, 10:09
Цитата Сообщение от Sasha Посмотреть сообщение
OpenDialog1->InitialDir = (ExtractFileDir(Application->ExeName));
Это не всегда будет работать. Причину я озвучил выше. Чем длиннее имя папки, в которую установлено приложение, тем больше шансов, что оно не заработает.
1
0 / 0 / 0
Регистрация: 11.12.2015
Сообщений: 50
12.12.2015, 22:22  [ТС]
Даже если кинуть исполняемый файл на диск D - всё равно не работает
0
12.12.2015, 22:25

Не по теме:

Цитата Сообщение от volvo Посмотреть сообщение
, лишние \. в пути мешают коду отработать нормально, надо их удалять...
Это ты о чем ?

0
0 / 0 / 0
Регистрация: 11.12.2015
Сообщений: 50
12.12.2015, 22:27  [ТС]
Это ты о чем ?
D:\papka\papka\papka\1\1\1\1\1\1\1\1\1\1 \1\1\1\1\2.txt
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.12.2015, 22:30
Подозрения что кто-то не понимает что такое текущая директория.

C++
1
ExtractFileDir(Application->ExeName)
Папка где лежит экзешник.
C++
1
GetCurrentDir()
Текущая(рабочая) папка.
Это разные вещи.

Strelok372, Что именно нужно вам?
0
0 / 0 / 0
Регистрация: 11.12.2015
Сообщений: 50
12.12.2015, 23:05  [ТС]
Strelok372, Что именно нужно вам?
Папка, где лежит экзешник
Я имел в виду
Текущая директория, где находится исполняемый файл

И предлагаемый Вами код я уже пытался попробовать
Потому что я его сверху написал
при
AnsiString CD;
CD=GetCurrentDir();
OpenDialog1->InitialDir=CD;
тоже ничего
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.12.2015, 23:19
Цитата Сообщение от Strelok372 Посмотреть сообщение
Папка, где лежит экзешник
Я имел в виду
Текущая директория, где находится исполняемый файл
Еще раз и внятно...
0
0 / 0 / 0
Регистрация: 11.12.2015
Сообщений: 50
12.12.2015, 23:29  [ТС]
Папка, где лежит экзешник
Директория, где находится исполняемый файл*
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.12.2015, 23:35
C++
1
2
3
4
5
6
7
String FilePath;
OpenDialog1->InitialDir=  ExtractFileDir(Application->ExeName);
if(OpenDialog1->Execute)
{
    FilePath= OpenDialog1->FileName;
    ListBox1->Items->Add(ExtractFileName(FilePath));
}
Но это уже вроде описали до этого, вероятно вы что-то не так делаете.
1
0 / 0 / 0
Регистрация: 11.12.2015
Сообщений: 50
13.12.2015, 00:09  [ТС]
Но это уже вроде описали до этого, вероятно вы что-то не так делаете.
Спасибо
Такс, заработало
Но проблема обнаружилась, почему раньше не работало
Во время первого исполнения открывается директория экзешника
Но во второй и во все последующие разы открывается последняя используемая директория
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
13.12.2015, 02:42
Цитата Сообщение от Avazart Посмотреть сообщение
Это ты о чем ?
Это я вот об этом:



И пока эту точку с бекслешем не изведешь из строки - будут глюки. Но на это же всем плевать, правда? Главное - выпендриться, и плюсик свой получить (да еще и лучший ответ, чтоб как можно больше юзеров погорело на этом бреде, который ты привел), а то, что твое решение в 80% случаев нерабочее - это так, побочный эффект.
1
0 / 0 / 0
Регистрация: 11.12.2015
Сообщений: 50
13.12.2015, 03:05  [ТС]
volvo, спасибо за помощь, но после первого открытия диалога он начинает открывать диалог вновь в папке последнего использования, это нормально?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
13.12.2015, 12:42
Цитата Сообщение от volvo Посмотреть сообщение
Это я вот об этом:
На это можно забить, эта точка появляется только при запуске из IDE, как я помню.(Какая-та бага от абракадабры)
Да и точка это лишь указание на текущую директорию.
Цитата Сообщение от Strelok372 Посмотреть сообщение
Но во второй и во все последующие разы открывается последняя используемая директория
Если не подводит память в OpenDialog есть какое-то свойство отвечающие за запоминание последней директории, поищите.

Добавлено через 28 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject* Sender)
{
    String FilePath;
 
    OpenDialog1->Options= OpenDialog1->Options<<ofNoChangeDir;
    OpenDialog1->InitialDir= ExtractFileDir(Application->ExeName);
 
    if (OpenDialog1->Execute())
    {
        FilePath= OpenDialog1->FileName;
        ListBox1->Items->Add(FilePath);
    }
}
Да и запускайте через Run/Run without Debugging
0
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
16.07.2019, 15:07
Цитата Сообщение от volvo Посмотреть сообщение
лишние \. в пути мешают коду отработать нормально, надо их удалять...
А откуда они? Кажется, на ХР не было такого.
Прочитал выше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.07.2019, 15:07
Помогаю со студенческими работами здесь

Как извлечь имя файла из полного пути к файлу?
Вот к примеру, я загрузил файл, и в edt1.Text - он записал путь к файлу... C:\Program Files\Music\may.mp3 Отсюда, я хочу выделить...

Как в консольном приложении узнать текущую директорию?
Пишу в Visual C++ 2008.

Как узнать текущую директорию запущенного приложения?
Люди! Подскажите как я могу из моей VB программы узнать, в какой директории я нахожусь в данный момент? Я уже замучился искать! :-( ...

Как извлечь имя файла без его полного пути и расширения?
как извлечь имя файла без его полного пути и расширения? какой код для кнопки сохранить в текстовом редакторе?

Как присвоить текущую директорию при запуске приложения?
Как присвоить директорию запуска программы в InitialDirectory у OpenFileDialog? Я не прописывал openfiledialog вручную, а добавил его из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru