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

Имя и директория файла

31.10.2018, 13:30. Показов 1718. Ответов 10

Студворк — интернет-сервис помощи студентам
При добавлении имени файла в listbox(nme) пишет ошибку.Думаю это связано с 1 и 2.
Но как тогда получить директ файла и его имя.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __fastcall TForm1::Jnrj1Click(TObject *Sender)
{
 String nme="q",locc;
 int i,i2;
if (OpenTextFileDialog1->Execute()) {
        Memo1->Lines->LoadFromFile(OpenTextFileDialog1->FileName);
        locc=ExtractFileDir(OpenTextFileDialog1->FileName);              //1
       nme=ExtractFileName(OpenTextFileDialog1->FileName);              //2
 
       for (i = 0; i < ListBox1->Count; i++) {
 
 
        if (ListBox1->Items->Strings[i]==nme) {
            i2=i;
        }
       } 
       if (ListBox1->Items->Strings[i2]==nme) {
 
       }else ListBox1->Items->Add(nme);
}
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.10.2018, 13:30
Ответы с готовыми решениями:

Дано полное имя файла, т.е путь к файлу, имя и расширение. Выделить с этого рядка имя файла без расширения/
C++

Дано полное имя файла, т.е путь к файлу, имя и расширение. Выделить с этого рядка имя файла без расширения
На с++

Как узнать полное имя файла зная его краткое имя?
например при запуске программы достаточно написать &quot;Excel&quot; или &quot;Calc&quot; при этом система уже в курсе где этот файл лежит. как программно...

10
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
31.10.2018, 13:51
Лучший ответ Сообщение было отмечено Alesha55535 как решение

Решение

Alesha55535, вы собираетесь работать со строками возможно еще пустого списка...? Предлагаю присмотреться к операции spisok->IndexOf(stroka); это не дает ошибки даже в случае пустого списка.
Вот пример:
C++
1
2
3
4
void __fastcall TForm1::Button1Click(TObject *Sender)
{
     Label1->Caption = ListBox1->Items->IndexOf(Edit1->Text);
}
Миниатюры
Имя и директория файла  
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33195 / 21491 / 8233
Регистрация: 22.10.2011
Сообщений: 36,881
Записей в блоге: 12
31.10.2018, 14:12
nick42, это бесполезно. В прошлой теме я несколько раз пытался донести опасность даже попытки доступа к элементу с индексом, превышающим размер листбокса. Не хотят слышать (и читать). Пока у самих программа не рухнет в самый неподходящий момент - не поверят.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
31.10.2018, 14:20
Вероятно. Хотя это не логично; если в списке ни одного item'а, - любая операция даже с первой строкой (которой нет) бессмысленна. В такой список можно только добавлять. Вот когда строк хотя бы две, то их уже можно переставлять, переименовывать, удалять... .
0
 Аватар для Alesha55535
0 / 0 / 0
Регистрация: 29.10.2017
Сообщений: 32
31.10.2018, 15:59  [ТС]
nick42, Но как реализовать item -> имя и директория
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
31.10.2018, 16:55
Как реализовать ваш замысел, который вы не озвучили? Не знаю. Вот интересная логика у людей... - опубликуют кусок кода, чаще не работающего, и потом долго и нудно всё сообщество начинает выяснять: что же ему все-таки надо. Вы думаете -фрагмент программы на С++ объяснит лучше слов замысел автора? Не уверен; мне во всяком случае лучше простыми словами.
0
Модератор
 Аватар для D1973
9907 / 6444 / 2455
Регистрация: 21.01.2014
Сообщений: 27,353
Записей в блоге: 3
31.10.2018, 17:10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if (OpenTextFileDialog1->Execute()) {
        Memo1->Lines->LoadFromFile(OpenTextFileDialog1->FileName);
        locc=ExtractFileDir(OpenTextFileDialog1->FileName);              //1
       nme=ExtractFileName(OpenTextFileDialog1->FileName);              //2
//Вот до сюда все было понятно: 
//выбрали в диалоге файл. 
//загрузили его в Мемо, 
//разделили полное имя файла на путь и непосредственно имя
//и занесли их в разные переменные
 
//А вот дальше начинается бред, который Вам необходимо объяснить: 
//что Вы хотели этим добиться? 
       for (i = 0; i < ListBox1->Count; i++) {
 
 
        if (ListBox1->Items->Strings[i]==nme) {
            i2=i;
        }
       } 
       if (ListBox1->Items->Strings[i2]==nme) {
 
       }else ListBox1->Items->Add(nme);
}
0
 Аватар для Alesha55535
0 / 0 / 0
Регистрация: 29.10.2017
Сообщений: 32
01.11.2018, 11:45  [ТС]
D1973,
Запрещаю добавлять подобные в items
C++
1
2
3
4
5
6
7
8
9
10
for (i = 0; i < ListBox1->Count; i++) {
 
 
        if (ListBox1->Items->Strings[i]==nme) {
            i2=i;
        }
       } 
       if (ListBox1->Items->Strings[i2]==nme) {
 
       }else ListBox1->Items->Add(nme);
0
Модератор
 Аватар для D1973
9907 / 6444 / 2455
Регистрация: 21.01.2014
Сообщений: 27,353
Записей в блоге: 3
01.11.2018, 12:40
Абстрагируемся пока от того факта, что Ваш код уронит программу в случае пустого списка... Предположим, что какие-то записи в нем все же есть... Давайте разберем этот чудо-кот по косточкам (для большей наглядности я его переформатировал...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
for (i = 0; i < ListBox1->Count; i++)
//организовали цикл по айтемам ЛистБокса... ладно (как я уже сказал, пока мы считаем, что записи в нем есть...)  
 {
    if (ListBox1->Items->Strings[i]==nme) 
//Если очередной из айтемов равен имени файла без пути
      {
            i2=i;
//тогда переменная i2 получает значение номера найденного айтема...
      }
 } 
//Оп-па... цикл закончился... И что мы имеем в сухом остатке?
//В лучшем случае, если что-то найдено, в переменной i2 содержится индекс айтема... 
//Если совпадений 2 или более - в i2 - индекс последнего из найденных
//А если нет?
//Если не один айтем не равен переменной nme, то i2 может быть равной либо 0, если была объявлена глобально
//либо может быть равна... А хрен знает - чему... Мусору какому-нибудь...
if (ListBox1->Items->Strings[i2]==nme)
//Опять проверяем, а вправду ли айтем с индексом i2 равен переменной nme
//Спрашивается - нафига? А если в предыдущем цикле ничего не было найдено и в i2 - просто мусор?
//Вот Вам еще один вылет программы! 
 {
//Но, даже если чудо случилось и программа до сих пор не вылетела (исчезающе малый процент вероятности)
//то что должно произойти??? Операторные скобки пусты! 
 }
//И, наконец, если таки ничего не найдено, если программа до сих пор работает, если...
//Тогда мы смело добавляем в ЛистБокс очередной айтем...
else ListBox1->Items->Add(nme);
//Уф-ф-ф!!!

Не по теме:

Недавно видел мельком по телевизору передачу под названием "Где логика?". Так вот, логики и в той передаче и в этом коде - примерно одинаковое количество, но программа хотя бы позиционирует себя, как юмористическая, Вы же, как я понял, на полном серьезе утверждаете, что этим кодом Вы

Цитата Сообщение от Alesha55535 Посмотреть сообщение
Запрещаю добавлять подобные в items
М-да...


Предвижу сакраментальный вопрос: "Что делать?"
Читать про класс TStrings и в частности про метод этого класса IndexOf() и использовать его. Но, собственно, об этом уже говорил nick42 в посте #2, но его, как я понял, Вы не услышали...
0
 Аватар для Alesha55535
0 / 0 / 0
Регистрация: 29.10.2017
Сообщений: 32
01.11.2018, 13:44  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Читать про класс TStrings и в частности про метод этого класса IndexOf() и использовать его.
Это мой старый огрызок кода, уже поменял на indexof()
0
01.11.2018, 15:46

Не по теме:

Цитата Сообщение от Alesha55535 Посмотреть сообщение
Это мой старый огрызок кода
Впредь, когда вопрос задаете, выкладывайте актуальный код, который вызывает ошибку, а не "старый огрызок"...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.11.2018, 15:46
Помогаю со студенческими работами здесь

Имя файла в PlaySound = имя переменной
Всем привет. Осваиваю С++, пока знаю на уровне школьника-троечника. Дорабатываю для своих целей одну опенсорсную прогу, возможно, в...

Дано полное имя файла, т.е путь к файлу, имя и расширение. Выделить из строки только имя первого католога
Помогите пожалуйста!!! Залание: Дано полное имя файла, т.е путь к файлу, имя и расширение. Выделить из строки только имя первого...

Выделять из имени каждого файла имя компьютера и имя учётной записи и записывать их в два файла соответственно
здравствуйте, подскажите... Есть например, 10 файлов (.txt) в названии которых написано имя компьютера и имя учетной записи Так же в...

Дана строка содержащая полное имя файла.Выделить из этой строки только имя файла без расширения
1.Дан символ С.Вывести его код (то есть номер в кодовой таблице) 2. Дан символ С.Вывести два символа, первый из которых предшествует...

Дана строка, содержащая полное имя файла. Выделить из этой строки имя и расширение файла
дана строка, содержащая полное имя файла, т.е. имя диска, список каналов(путь), собственно имя и расширение.выделить 1) из этой строки имя...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru