Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

странности FindFirst


Страницы:   1 2 3

wp2 ©   (2011-12-13 16:45:00) 

задача была найти файлы типа фывфыва001фываывфа
фвафыва002фывафыва
фывафыва003фвыафыва
фывафыва004фывафыва
и т.д.

и соответственно их переименовать по нужному принципу

function AddZero(a: Integer): String;//добавление
передних нулей
var i: Integer;
   s: String;
begin
   s := IntToStr(a);
   for i := 1 to 3 - Length(s) do
   s := '0' + s;
   AddZero := s;  
end;



//основной код
for i := 1 to 118 do
 begin
   Zero := AddZero(i);
   R := FindFirst(Dir + '*' + Zero + '*', faAnyFile, Find);
  //обработка файла
 FindClose(Find);
 end;


Всё работает, но...
вы не поверите, то файлы 004, 014 не находит! Точнее находит но не их! А какой-нибудь 186, например. Переменная R = 0.


wp2   (2011-12-13 23:31:00) [41]

значит так:
если почему именно тот случай не работал, так и не понял.
Для примера взял несколько другой пример, например q001q q002q и т.д.

работает.


sniknik   (2011-12-13 21:31:00) [42]

а, по моему понял/вспомнил на ntfs подобного нет. или нет...?


sniknik   (2011-12-13 21:18:00) [43]

странно, проверил, не заполняется у меня cAlternateFileName ... не находится по короткому имени поэтому значит... винда XP. D7.


MBo   (2011-12-13 20:43:00) [44]

файл "фывфыва014фываывфа" получает короткое имя вроде "фывф~001"

Стоит попробовать FindFirstFileEx и с infolevel разобраться (у меня не открывается описание его значений)


Дмитрий Белькевич   (2011-12-13 20:26:00) [45]

Дай соответствующую команду dir из командной строки. Может чем-то поможет.


wp2   (2011-12-13 20:10:00) [46]

ну... тут прикол в самой WinAPI структуре TWin32FindData. В неё записывается как длинное имя, так и короткое.

Вот длинное, не то что надо, а короткое норм, только в сжатом формате :(

по сабжу: честно говоря уже начинаю сдаваться, перепробовал всё что мог и придумал. Даже искал с помощью WinAPI функций. Та же проблема.

думал, может файловая система повреждена. Но вроде всё норм.
Думал, может эти тестовые файлы фвафыва002фывафыва и т.д. криво созданы?
но нет, перепробовал разными способами их создавать.

ХЗ!


sniknik   (2011-12-13 19:22:00) [47]

короткие имена это наследство от дос, близко к консоли.
просто мысль/предположение, а почему оно может искать в коротких именах?


wp2   (2011-12-13 19:13:00) [48]

нет

а какое это имеет значение?


sniknik   (2011-12-13 19:06:00) [49]

программа консольная что ли?


wp2   (2011-12-13 18:45:00) [50]

только что заметил, что в Find.FindData.cAlternateFileName правильное найденное имя файла, только в формате 8.3


wp2   (2011-12-13 18:38:00) [51]

добавил строку if Pos('004', Find.Name) = 0 then FindNext(Find);

еще что-то левое нашло)

может это так винда у меня глючит...


wp2   (2011-12-13 18:34:00) [52]

попробовал вот так:

for i := 4 to 118 do
 begin
   Zero := AddZero(i);
   R := FindFirst(Dir + '*004*', faAnyFile, Find);


всё равно :)


Dimka Maslov   (2011-12-13 18:26:00) [53]

1. Вместо AddZero для подобных вещей надо пользоваться Format
2. Странно что находит 186 при цикле до 118
3. Раз находит, но не их, значит есть другие файлы с такой маской.
4. Раз находит, но не их, значит надо вызывать FindNext, чтобы найти их.


Медвежонок Пятачок   (2011-12-13 17:30:00) [54]

Если r=0 значит находит


wp2   (2011-12-13 17:06:00) [55]

^ не находит файлы с четверками


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо