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

Как обратиться к файлу из FileListBox?

18.06.2014, 17:37. Показов 5078. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет!
Извиняюсь за очередной нубский вопрос. Продолжаю мучить RAD Studio.
Мне необходимо обратиться к конкретному файлу из FileListBox. Как это сделать? В обычном ListBox или , скажем, в TreeView, есть ListBox->Items->Item[i]. В FileListBox этого нет, что делать?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2014, 17:37
Ответы с готовыми решениями:

Как сделать чтобы в Edit писало путь к выбраному файлу в FileListBox
Как сделать чтобы в Edit1 писало путь к выбраному файлу в FileListBox1?

как обратиться к файлу в проекте
Проблема такова: я добавил в проект таблицу стилей css. генерирую страницу html. теперь, если я...

Как обратиться к текстовому файлу
Создан текстовый файл , как к нему обратиться в программе и возможна ли его корректировка из...

Как обратиться к файлу в Visual Studio
В простеньких компиляторах чтобы открыть файл достаточно кинуть этот файл в папку с программой, в...

16
Модератор
9260 / 6038 / 2379
Регистрация: 21.01.2014
Сообщений: 25,801
Записей в блоге: 3
18.06.2014, 18:31 2
Цитата Сообщение от Harb Посмотреть сообщение
В FileListBox этого нет
Зато есть свойство FileName, которое указывает, какой именно файл выделен в данном компоненте.
C++
1
2
3
4
void __fastcall TForm6::Button1Click(TObject *Sender)
{
  ShowMessage(FileListBox1->FileName);
}
0
1 / 1 / 0
Регистрация: 23.03.2014
Сообщений: 79
18.06.2014, 18:41  [ТС] 3
FileName я знаю, но это не подходит. Т.к. мне надо проанализировать весь список, и найти файл с максимально длинным именем.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
18.06.2014, 18:48 4
Цитата Сообщение от Harb Посмотреть сообщение
В FileListBox этого нет
Что значит "нет"? Свойства Items нет? Есть, оно никуда не делось. Только обращаться к содержимому надо не через FileListBox1->Items->Item[i], а через FileListBox1->Items->Strings[i]...

А вот FileListBox сам по себе - уже давно пережиток прошлого. Почему проблема решается именно с его помощью, а не более современными средствами?
0
1 / 1 / 0
Регистрация: 23.03.2014
Сообщений: 79
18.06.2014, 18:51  [ТС] 5
Свойство Items есть, но как через него обратиться к i-ому элементу?
Что касается современных средств, то я их, видимо, не знаю. Если посоветуете, буду признателен.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
18.06.2014, 18:57 6
C++
1
ShowMessage(FileListBox1->Items->Strings[2]);
Выведет название третьего файла в списке (если он там есть, конечно), Items - обычный TStrings, со всеми вытекающими...
Цитата Сообщение от Harb Посмотреть сообщение
Если посоветуете, буду признателен.
Для начала надо озвучивать версию RAD, если что... А то сейчас начнешь что-то рассказывать, а окажется, что у тебя 2006 или 2007 (прямо грандиозное обновление, что сказать, от BCB6 эпохи динозавров до 2006 эпохи пещерного человека)... Если XE или выше - расскажу...
1
Модератор
9260 / 6038 / 2379
Регистрация: 21.01.2014
Сообщений: 25,801
Записей в блоге: 3
18.06.2014, 18:57 7
Лучший ответ Сообщение было отмечено Harb как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm6::Button1Click(TObject *Sender)
{
  FileListBox1->Directory = ExtractFilePath(Application->ExeName);
  int Max = 0;
  String sMax = "";
  for(int i = 0; i < FileListBox1->Count; i++)
   {
     if((FileListBox1->Items->Strings[i]).Length() > Max)
      {
        Max = (FileListBox1->Items->Strings[i]).Length();
        sMax = FileListBox1->Items->Strings[i];
      }
   }
  ShowMessage("Файл с самым длинным именем - " + sMax + "\nДлина имени - " + IntToStr(Max));
}
Миниатюры
Как обратиться к файлу из FileListBox?  
2
Модератор
9260 / 6038 / 2379
Регистрация: 21.01.2014
Сообщений: 25,801
Записей в блоге: 3
18.06.2014, 18:59 8
Цитата Сообщение от UI Посмотреть сообщение
Если XE или выше - расскажу...
Было бы интересно услышать... RAD XE3 если что...
0
1 / 1 / 0
Регистрация: 23.03.2014
Сообщений: 79
18.06.2014, 19:06  [ТС] 9
Если XE или выше - расскажу...
У меня C++ Builder 2010
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
18.06.2014, 19:20 10
В 2010 может и пролететь (хотя может и заработает, пёс его знает), начиная с XE точно работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <System.IOUtils.hpp>
// ...
 
    TStringDynArray Files = TDirectory::GetFiles(ExtractFilePath(Application->ExeName), "*.*");
    int Index = 0, maxLen = 0;
    for(int i = 0; i < Files.Length; ++i)
    {
        int curr_len = Files[i].Length();
        if(curr_len > maxLen)
        {
            Index = i; maxLen = curr_len;
        }
    }
    ShowMessage("Longest file name : " + Files[Index]);
3
1 / 1 / 0
Регистрация: 23.03.2014
Сообщений: 79
18.06.2014, 19:58  [ТС] 11
D1973, Спасибо!
Разобрался.
0
BRcr
18.06.2014, 20:39
  #12

Не по теме:

Цитата Сообщение от Harb Посмотреть сообщение
D1973, Спасибо!
Разобрался.
Вот так оно все и бывает.:D
"А вы, товарищ, ступайте лесом со своими непонятными TStringDynArray..."

0
Модератор
9260 / 6038 / 2379
Регистрация: 21.01.2014
Сообщений: 25,801
Записей в блоге: 3
18.06.2014, 20:55 13
Цитата Сообщение от UI Посмотреть сообщение
for(int i = 0; i < Files.Length; ++i)
UI, просветите в таком вопросе: в чем принципиальная разница использования в цикле for конструкции ++i, а не i++. Как-то это ускользает от понимания...
0
1 / 1 / 0
Регистрация: 23.03.2014
Сообщений: 79
18.06.2014, 21:20  [ТС] 14
Вот так оно все и бывает.
"А вы, товарищ, ступайте лесом со своими непонятными TStringDynArray..."
Принцип бритвы Оккамы - не умножай сущности. Для моего уровня самый простой вариант полезнее, чем самый лучший.
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.06.2014, 21:40 15
Цитата Сообщение от D1973 Посмотреть сообщение
в чем принципиальная разница использования в цикле for конструкции ++i, а не i++. Как-то это ускользает от понимания...
Хех) Разница в операторах. Один создает временную переменную в процессе своей работы, другой - нет. Тогда как по логике именно постинкремент в этом месте не нужен и операция оказывается лишней. В алгоритмах, чувствительных к производительности, это очень важно. В остальных случаях обращать на это внимание - правило хорошего тона.

Добавлено через 1 минуту
Harb,
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
18.06.2014, 22:13 16
Цитата Сообщение от Harb Посмотреть сообщение
самый простой вариант полезнее
Когда уже Эмбаркадеро сольет из своих компонентов то, что было предназначено для 16-ти битной Windows? Вот, кстати, тогда ты сразу поймешь, что лучше: то, что понятнее тебе, или нечто другое. Оккаму он цитирует. Ты сам-то придерживаешься его принципов? На кой фиг тебе вообще визуальный компонент, при подобной постановке задачи?

А вообще, я тут пишу решения не для тех, кто не может их осилить, а для тех, кому интересно разобраться, и понять, что кроме тупого копирования с места на место одних и тех же кодов, написанных еще под Дельфи 6, и переведенных потом для Билдера, есть и еще варианты. Вопрос на засыпку: попробуй исправить свой код (с использованием FileListBox-а), чтобы найти самое длинное имя файла не просто в одной папке, а и во всех ее поддиректориях. Вот тебе, бабушка и Оккам-ов день...
0
1 / 1 / 0
Регистрация: 23.03.2014
Сообщений: 79
18.06.2014, 22:30  [ТС] 17
На кой фиг тебе вообще визуальный компонент, при подобной постановке задачи?
Визуальный компонент мне нужен для того, чтобы определить длину названия этого самого файла в пикселях и ширину этого самого компонента подогнать автоматически. Кстати, откуда такой негатив? Я в вашем сообщении тоже разобрался, и в будущем, при необходимости, буду это использовать. За что вам спасибо. Просто сейчас мне необходимо выполнить определенную работу, и в этой работе у меня уже задействован FileListBox, спрашивается, зачем мне что-то новое придумывать? К этому и Оккама.
0
18.06.2014, 22:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2014, 22:30
Помогаю со студенческими работами здесь

Как правильно обратиться к файлу функции?
Всем привет, нету организовано никакого рута, пытаюсь разобратся с азами... У меня есть в index...

Как обратиться к XML-файлу, добавленного в проект
Нажимаю на имени проекта в обозревателе, выбираю добавить xml-файл. Вот его создало, но какая у...

Как обратиться к mif/hex файлу в FPGA?
Здравствуйте! у меня есть hex/mif файл с какими-то данными. Как загрузить эти файлы в ПЛИС, чтобы...

Как обратиться к файлу, лежащему в jar архиве запускаемой программы?
Всем доброго времени суток. Вопрос я думаю простой: Есть jar. Внутри него, помимо файлов...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru