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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2009, 11:30   #1
Ralf_ru
Пользователь
 
Регистрация: 19.03.2009
Сообщений: 26
По умолчанию перебор файлов

Госпада помагите...
Ищу файлы с помощью MatchesMask:
type
TFileName = string;
TMatchesMask = function(TFileName:string;mask:stri ng): boolean;



if FindFirst(filename, faAnyFile,SearchRec) = 0 then
repeat
if MatchesMask(searchRec.name,FileName ) then
begin
n := n + 1;
a[n]:=(SearchRec.Name);
end;
until FindNext(SearchRec) <> 0;
При чтении второго условия выдается ошибка - proect.exe raised too many consecutive exceptions : 'access violation at 0x00000000: read of address 0x00000000'. process stoped.
В чем дело? Может в объявлении MatchesMask (неправильном), может потомучто в Viste, а может ещё что?
Ralf_ru вне форума Ответить с цитированием
Старый 31.03.2009, 11:40   #2
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

searchRec.name - имя найденого файла, файлы ищуться по маске filename..
возникает вопрос: если файл найден по маске - то зачем его снова проверять на соответствие этой маске??
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 31.03.2009, 11:56   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ошибка вылезает не потому что Виста, а потому что ты скорее всего выходиш за пределы, когда присваиваеш a[n] значение.
Поставь условие на проверку можно ли присваивать такому элементу массива, или пользуй динамические массивы. А функция тут не причем
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.03.2009, 12:02   #4
Ralf_ru
Пользователь
 
Регистрация: 19.03.2009
Сообщений: 26
По умолчанию

SearchRec.name - выдает полный путь с именем папки...
как мне вытащить именно имя файла?
Ralf_ru вне форума Ответить с цитированием
Старый 31.03.2009, 12:11   #5
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

есть 2 способа:
1) ручками ищи последний символ '\' все шо после него - имя файла
2) ExtractFileName
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 31.03.2009, 12:57   #6
Ralf_ru
Пользователь
 
Регистрация: 19.03.2009
Сообщений: 26
По умолчанию

за ExtractFileName спасибо...
а вот ручками как прописать можешь привести пример кода?
Ralf_ru вне форума Ответить с цитированием
Старый 31.03.2009, 13:09   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а вот ручками как прописать можешь привести пример кода?
Зачем?? Тебе ж сказали - ExtractFileName. Че его перепрописывать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.03.2009, 13:11   #8
Ralf_ru
Пользователь
 
Регистрация: 19.03.2009
Сообщений: 26
По умолчанию

для себя интересно...
Ralf_ru вне форума Ответить с цитированием
Старый 31.03.2009, 13:32   #9
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Ну так открой исходник функции и посмотри.
FaTaL вне форума Ответить с цитированием
Старый 31.03.2009, 14:06   #10
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

Код:
var i:integer;
     s:string;//тут хранится полнуй путь к файлу
     FN:string;//сюда запишем имя файла
begin
//находим последний символ '\'
for i:=Length(s) downto 1 do
 if s[i]='\'
  then break;
//копируем имя файла.. оно наинается со следующего символа..
FN:=Copy(s, i+1, Length(s)-i)
//ищем последнюю точку
for i:=Length(FN) downto 1 do
 if s[i]='.'
  then break;
//удаляем расширение с имени файла
Delete(FN, i, Length(FN));
end;
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перебор чисел (pascal) mozdok15rus Помощь студентам 7 19.03.2009 17:54
Перебор и его сокращения *Zimnij* Общие вопросы C/C++ 1 04.01.2009 14:38
Проблема с задачей на перебор.. Nixond Паскаль, Turbo Pascal, PascalABC.NET 2 06.10.2008 13:45
Перебор элементов матрицы pikkk Общие вопросы Delphi 3 09.05.2008 14:45