Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2009, 20:46   #1
Vladya
Форумчанин
 
Аватар для Vladya
 
Регистрация: 04.11.2008
Сообщений: 360
Вопрос Проверка на наличие файла

Добрый вечер! Проблема заключается в следующем: мне нужно что бы при запуске программа проверяла есть ли файл или нет, пути к файлам хранятся в ListBox'e. Программа должна проверить все пути, и если файл не найден то удалять эту строку из ListBox'a
Подскажите пожалуйста если кто знает, ато если честно даже не представляю как это можно сделать.
Заранее спасибо!
Мой скромненький сайт
Vladya вне форума Ответить с цитированием
Старый 09.10.2009, 20:50   #2
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Код:
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
//Здесь заполняем поля
...
for i:=0 to listbox1.Items.Count-1 do
if not fileexists(listbox1.Items.Strings[i]) then
listbox1.Items.Delete(i);
end;
pushl $0x18E3DF6B
call ICQ

Последний раз редактировалось russian-stalker; 09.10.2009 в 20:53.
russian-stalker вне форума Ответить с цитированием
Старый 09.10.2009, 22:15   #3
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Код:
 Var
   F:file;
   i:integer;
...
for i:=0 to listbox1.Items.Count-1 do
begin
 Assign(f,listbox1.Items.Strings[i]);
{$I-}            {отключение стандартной обработки}
reset(f);        {открытие файла}
{$I+}            {включение стандартной обработки}
if IOResult=0 then  {Фаил сушествет и открыт, делаем нужные нам действия}
              else  listbox1.Items.Delete(i);
Close(f);
end;
ешё как вариант, только учтите что у вас может возникнуть проблема с выбаркой строк из листбокса, т.к. они будут сдвигатся, как вариант предлагаю запоминать номера строк которые надо удалить и потом отдельным циклом удалить ненужные строки, номера строк можно например записать в массив. Либо использовать цикл While и при удалении начинать цикл с 0 строки лист бокса а ешё лучший вариант просматривать с предидушего чтобы не делать лишнии проверки сначало...
Код:
i:=0;
While i<= listbox1.Items.Count-1 do
begin
 Assign(f,listbox1.Items.Strings[i]);
{$I-}            {отключение стандартной обработки}
reset(f);        {открытие файла}
{$I+}            {включение стандартной обработки}
if IOResult=0 then  
                   begin           
{Фаил сушествет и открыт, делаем нужные нам действия}
                     inc(i) ;
                   end 
              else  
                begin
                  listbox1.Items.Delete(i);
                  i:=-1; /// вот это действие необязательно, но чтобы наверняка можно его сделать будит братся предидуший
                end;
Close(f);
end;

Последний раз редактировалось Dozent; 09.10.2009 в 22:30.
Dozent вне форума Ответить с цитированием
Старый 09.10.2009, 22:37   #4
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Проверка на наличие файла... =\\
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 09.10.2009, 22:55   #5
Usov
Форумчанин
 
Аватар для Usov
 
Регистрация: 29.09.2009
Сообщений: 228
По умолчанию

Код:
for i:=0 to listbox1.Items.Count-1 do
такой код будет работать неправильно
правильнее будет:
Код:
for i:=listbox1.Items.Count-1 downto 0 do
Usov вне форума Ответить с цитированием
Старый 09.10.2009, 23:09   #6
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Цитата:
Сообщение от Usov Посмотреть сообщение
Код:
for i:=0 to listbox1.Items.Count-1 do
такой код будет работать неправильно
правильнее будет:
Код:
for i:=listbox1.Items.Count-1 downto 0 do
А это случайно не одно и тоже, просто в разных порядках, первый: от 0 до ..., а ваш: от ... до 0 ?
W0LF вне форума Ответить с цитированием
Старый 09.10.2009, 23:19   #7
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Цитата:
Сообщение от W0LF Посмотреть сообщение
А это случайно не одно и тоже, просто в разных порядках, первый: от 0 до ..., а ваш: от ... до 0 ?
ну как бы да от конца листбокса проверять проше, потому что не будит выходить ошибка что несоответсвует номер строки и номер итерации, просто мне часто приходилось с этим работать и это был один из выходов чтобы не выходила ошибка цикл начинал с конца.
Dozent вне форума Ответить с цитированием
Старый 10.10.2009, 01:26   #8
Vladya
Форумчанин
 
Аватар для Vladya
 
Регистрация: 04.11.2008
Сообщений: 360
По умолчанию

Ребята спасибо большое за помощь!!! Очень помогли.
Мой скромненький сайт
Vladya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка на наличие в массиве istoe Microsoft Office Excel 8 26.08.2009 11:55
Проверка на наличие файла Demetrius Помощь студентам 12 28.07.2009 00:27
Проверка матрицы на наличие одинаковых строк Victory1 Помощь студентам 1 20.06.2009 00:11
Проверка на наличие нескольких максимальныхэлементов xxSINxx Помощь студентам 3 11.03.2009 20:40
Проверка на наличие таблицы в БД Ramires БД в Delphi 3 18.12.2008 08:59