![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
странности FindFirst
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]^ не находит файлы с четверками