Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/34: Рейтинг темы: голосов - 34, средняя оценка - 4.82
5 / 4 / 0
Регистрация: 08.06.2012
Сообщений: 111

ListBox и файлы

28.06.2012, 06:26. Показов 6903. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно сделать так чтоб в Listbox были те файлы которые в выбраной папке с проектом ...

Добавлено через 4 часа 6 минут
Честно нужен ответ .... Спасиб...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.06.2012, 06:26
Ответы с готовыми решениями:

ListBox и файлы
Например в каждой строке ListBox -а есть полное имя файла (Пример C:\hello\1.exe) Вопрос: Как получить местонахождение файла,его...

Файлы и Listbox
У меня процедура FormShow загружает названия файлов в listbox, только загрузка файлов происходит с расширением. Нужно сделать чтобы...

Файлы из ListBox
Добрый день. Подскажите каким образом можно реализовать задачу: Необходимо выбрать файл или файлы, они показываются в listbox. Далее...

40
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
19.06.2014, 07:33
Студворк — интернет-сервис помощи студентам
А директорию за которой следить (строка 74) прописал? А директория в которую копировать (строка 62).

Добавлено через 13 минут
Немного схалтурил я. Эту процедурку немного измени:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
Procedure TForm1.FindFileInFolderPred(path, ext: string;Copy:Boolean);
Begin
  If Copy Then
  Begin
    sl:=TStringList.Create;
    sl.Assign(ListBox1.Items);
  End;
  ListBox1.Items.Clear;
  FindFileInFolder(FDirectory,'*.*',Copy);
  If Copy Then
  sl.Free;
End;
Проверил. Всё копирует теперь.
1
16 / 16 / 5
Регистрация: 26.05.2014
Сообщений: 122
19.06.2014, 09:48
Спасибо, теперь работает
0
16 / 16 / 5
Регистрация: 26.05.2014
Сообщений: 122
20.06.2014, 13:55
Во время использование программы, столкнулся с тем что не сохраняется иеархия папок, своими усилиями не к чем хорошему не привело, подскажите в какую часть кода нужно обратить своё внимание?

и ещё, программа копирует новые файлы, но не копирует те файлы которые уже были в папке и не были в другой, где можно это дописать или переписать в какой процедуре?
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
21.06.2014, 03:56
Во время использование программы, столкнулся с тем что не сохраняется иеархия папок
Пожалуйста поподробнее, что имеешь в виду?

Добавлено через 10 часов 3 минуты
Delphi
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
Procedure TForm1.FindFileInFolder(path, ext: string;Copy:Boolean);
Var
  SR : TSearchRec;
  NewPath : String;
begin
  NewPath:=path;
  Delete(NewPath,1,Length(FDirectory));
  NewPath:='c:\1\'+NewPath;
  If FindFirst(path+ext,faAnyFile,SR)=0 Then
  Repeat
    If (Sr.name='.') Or (Sr.name='..') Then Continue;
 
    If Copy Then
//    If sl.IndexOf(path+Sr.name)=-1 Then //Проверяем, есть ли такая строка в списке
    If Not FileExists(NewPath+Sr.name) Then //Проверяем, существует ли конечный файл
    //Если нет (новый файл) - копируем
    CopyFile(PChar(path+Sr.name),PChar(NewPath+Sr.name),False);
 
    ListBox1.Items.Add(path+Sr.name);
    If ((Sr.Attr And faDirectory)<>0) Then
    FindFileInFolder(path+Sr.name+'\', ext,Copy);
    Application.ProcessMessages;
  Until FindNext(SR)<>0;
  FindClose(SR);
end;
Но это исходя из того, что исходные файлы не будут удаляться и не будут переименовываться при копировании. В этом случае можно вообще удалить всё что связано с сохранением списка в StringList (sl). И кроме того, все обращения к FindFileInFolderPred заменить на FindFileInFolder. А саму процедуру FindFileInFolderPred можно вообще убрать. Ведь проверяется только существует ли конечный файл с таким именем (с учётом подпапок).
А судя из другой твоей темы, предполагаю, что ты переносишь файлы добавляя к именам дату, время и удаляя исходные. В этом случае нужно поступать по другому.
0
16 / 16 / 5
Регистрация: 26.05.2014
Сообщений: 122
23.06.2014, 06:58
Я имею ввиду если в исходной папке появилась папка а в ней файл, то копируеться только файл, а не котолог.
И не собираюсь удалять исходный файл при копировании.
Суть вот в чём идёт слежение за папкой в которой установлена программа и при добавлении нового файла, файл копируеться на другой компьютер где то же есть эта программа. И поэтому новый файл должен копировать именно в туже директорию где появился исходный, а не в корень.
Пример как охота (D:\Forecast\Import\gho.dll ---> \\192.168.65.11\с$\Forecast\Import\gho.d ll )
а сейчас копирует в \\192.168.65.11\с$\Forecast\gho.dll
0
23.06.2014, 07:01

Не по теме:

Да я уже понял. И сделал так как ты сейчас написал (смотри мой предыдущий пост). Проверяй.

0
16 / 16 / 5
Регистрация: 26.05.2014
Сообщений: 122
23.06.2014, 10:11
Копирует, но при первом запуске программа не копирует файлы которых нет в другой папке, только когда появился новый файл тогда копирует уже файлы которых нет + новый файл.
Смотреть надо в Repeat? или это уже своиство таймера играет роль?
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
23.06.2014, 18:08
Я там в событии формы FormCreate делал специально, чтобы она при загрузке не копировала. А потом уже при изменении в директории реагировала. Там в обращении поставь True вместо False.
Delphi
1
  FindFileInFolderPred(FDirectory,'*.*',True);
Или просто закомментируй строку
Delphi
1
If Copy Then
в процедуре FindFileInFolder.
1
16 / 16 / 5
Регистрация: 26.05.2014
Сообщений: 122
24.06.2014, 07:08
Спасибо, вопросов больше не имею
0
16 / 16 / 5
Регистрация: 26.05.2014
Сообщений: 122
25.06.2014, 10:49
Хотя возник один вопрос, написал процедуру для создания лога, но при вызове не выдаёт список скопированных файлов, что делаю не так?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Log(Text:string);
var
N: TextFile;
FileName:String;
dt:string;
begin
FileName:= ExtractFilePath(Application.ExeName)+'Lod.txt';
AssignFile(N,FileName);
if FileExists(FileName) then
Append(N)
else
Rewrite(N);
dt:=DatetoStr(Date);
dt:=dt+' / '+TimetoStr(Time);
WriteLn(N, dt, ' : ', text);
CloseFile(N);
end;
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
25.06.2014, 18:06
В этой процедуре, вроде, всё правильно. Только она всего лишь переменную text сохраняет в файл. А вот где список файлов не вижу.
0
16 / 16 / 5
Регистрация: 26.05.2014
Сообщений: 122
26.06.2014, 07:13
при вызове процедуры
Delphi
1
2
3
4
5
 procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
log(listbox1.Items.Text);
...
end;
должны сохраниться перемеые которые скопировались, или я ошибаюсь?
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
26.06.2014, 22:21
У меня всё работает. Возможные причины, из-за чего у тебя не работает:
1. Ты не внёс заголовок процедуры в тело описания формы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
  TForm1 = class(TForm)
    ListBox1: TListBox;
...
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
    procedure Log(Text:string); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  end;
2. Ищешь файл log.txt, хотя в тексте процедуры ты обозвал его: lod.txt.

Добавлено через 49 минут
Кстати, согласно текущего кода у тебя в лог-файл будет записываться список всех файлов, имеющихся в директории к концу текущего сеанса работы. А не правильнее бы было писать туда только имена файлов, которые копировались?
0
16 / 16 / 5
Регистрация: 26.05.2014
Сообщений: 122
27.06.2014, 07:29
Lod на Log исправил, файл создавался но пустой, добавил
Delphi
1
2
3
4
public
    { Public declarations }
    procedure Log(Text:string); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  end;
список появился, и внём список всех файлов.
Правильнее чтобы был список копируемых файлов, но не получаеться не пойму какую переменную нужно положить, не подскажишь?
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.06.2014, 07:41
По-быстрому (опаздываю уже):
Там где идёт копирование файла - сохраняй его имя в какой-нибудь StringList (типа как sl), который создай в OnCreate формы. И при закрытии формы сохраняй список из него. И не забудь потом сделать Free этого StringList-а. Вечером могу подправить код, если сам не справишься. В этом случае выложи весь свой код, чтобы у нас небыло различий.
0
16 / 16 / 5
Регистрация: 26.05.2014
Сообщений: 122
27.06.2014, 09:38
Буду пробывать, но на 2 недели уезжаю с сегодняшнего дня, так что в ближайшее время отписать не получиться что получилось, но спасибо всё равно
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
28.06.2014, 20:15
Короче, сделал. Распакуешь в папку с модулями программы с заменой старых.
Вложения
Тип файла: rar Units for Folder Monitiring And Copy New.rar (1.8 Кб, 14 просмотров)
0
 Аватар для Daivel
0 / 0 / 0
Регистрация: 12.12.2014
Сообщений: 38
14.12.2014, 11:17
Одиночка, У меня такой вопрос. Мне нужно что бы файлы(*.bmp) из каталога где лежит программа заносились в ListBox, а при удалении этих файлов из папки или добавлении новых ListBox автоматически сканировал и заносил изменения.
Я скачал архив из 12 сообщения и изменил код как в 17 сообщении. В коде поменял значение *.mp3 на *.bmp, но почему то ни при создании формы, не при нажатии клавиши файлы не добавляются в ListBox. В чём может быть проблема?
Delphi
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
unit Unit1;
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    Procedure FindFileInFolder(path, ext: string);
    procedure Timer1Timer(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
  ChangeHandle: THandle;
  FDirectory : String;
 
implementation
 
{$R *.dfm}
 
Procedure TForm1.FindFileInFolder(path, ext: string);
Var
  SR : TSearchRec;
begin
  ListBox1.Items.Clear;
  If FindFirst(path+ext,faAnyFile,SR)=0 Then
  Repeat
    ListBox1.Items.Add(path+Sr.name);
  Until FindNext(SR)<>0;
  FindClose(SR);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var
  FScanSubDirs : Boolean;
begin
  FDirectory:=ExtractFilePath(Application.ExeName)+'plugins\';
  FindFileInFolder(FDirectory,'*.bmp');
 
  FScanSubDirs:=False;
  ChangeHandle:=FindFirstChangeNotification(PChar(FDirectory),
                                            FScanSubDirs,
                                            FILE_NOTIFY_CHANGE_FILE_NAME+
                                            FILE_NOTIFY_CHANGE_DIR_NAME);
  Timer1.Enabled:=True;
end;
 
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled:=False;
 
  If WaitForSingleObject(ChangeHandle,0)=WAIT_OBJECT_0 Then
  Begin
    FindFileInFolder(FDirectory,'*.*');
    FindNextChangeNotification(ChangeHandle);
  End;
  Timer1.Enabled:=True;
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FindCloseChangeNotification(ChangeHandle);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  FindFileInFolder(FDirectory,'*.bmp');
end;
end.
Добавлено через 26 минут
Одиночка, Понял ошибку, но встал другой вопрос. При копировании файла в папку в ListBox отображается весь пусть, а мне нужно только имя. Так же при удалении файла из папки строка с файлом меняться(пишется полный пусть до директории, но без файла) и появляется новая(точно такая же строка). Как сделать что бы этого не было. То есть файл добавили, появился я в Listbox, файл удалили, удалился из ListBox?
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
14.12.2014, 12:32
А не догадался в процедуре обновления ListBox убрать добавление пути к имени файла при добавлении строки:
Delphi
1
2
3
4
5
6
7
8
9
10
11
Procedure TForm1.FindFileInFolder(path, ext: string);
Var
  SR : TSearchRec;
begin
  ListBox1.Items.Clear;
  If FindFirst(path+ext,faAnyFile,SR)=0 Then
  Repeat
    ListBox1.Items.Add(Sr.name); //Вот здесь!!!!!!!!!!!!!
  Until FindNext(SR)<>0;
  FindClose(SR);
end;
1
 Аватар для Daivel
0 / 0 / 0
Регистрация: 12.12.2014
Сообщений: 38
14.12.2014, 20:51
Одиночка, Я только начал работать с Delphi. И ОЧЕНЬ много не знаю, не понимаю. Так что "Догадался" это точно не про меня. Увы и ах. Всё работает. Большое спасибо что подсказали.

Добавлено через 6 часов 33 минуты
У меня возник ещё такой вопрос. Как сделать что бы если мониторинг при старте программы не обнаружил *.bmp файлы в указанном месте не создавалась форма с ListBox, а если во время работы программы в папке появляются файлы автоматически создавалась форма с ListBox?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.12.2014, 20:51

Файлы по порядку, listbox
У меня есть строки, я хочу чтобы к каждой строке был txt, а потом в эти строки из ListBox по очереди записывались слова, как это...

Listbox, файлы и edit
Краткое описание программы: У меня есть форма адм: пасс в неё qwe11111. У меня есть кнопки: Добавить-Сохранить(1-Создает компонент в...

listbox и текстовые файлы. Visual C++
Всем добрый вечер. Пишу программу, для генерации экзаменационных билетов. Возник вопрос: у меня есть listbox, в которых я заношу...

ListBox и файлы в папке ( Plugins )
Вопрос: какой код, или тема ... нужно чтоб в ListBOx были файлы такие которые в папке 'plugins\'... и когда меняешь их (Фалы в папке под...

Скопировать файлы из listbox в папку
Вообщем в текстбокс выводится путь до папки куда нужно скопировать файлы из listbox! private void SelectVS_Click(object sender,...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru