Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.30;
Скачать: CL | DM;

Вниз

FindFirst-FindNext   Найти похожие ветки 

 
Anatoly P   (2003-06-09 19:56) [0]

Есть ли альтернатива FindFirst-FindNext-у, а то замечена некорректная работа на NTFS под WXP?


 
clickmaker ©   (2003-06-09 19:59) [1]

Нет. А в чем некорректность ?


 
Anatoly P   (2003-06-09 20:04) [2]

Возникает при работе с каталогом в котором лежит EXE-шник, лично сталкивался на двух компах, пока не понял в чем проблема


 
TCrash ©   (2003-06-09 20:09) [3]

А при работе с другими каталогами все нормально ?
и в каком месте возникает пробдема?


 
Anatoly P   (2003-06-09 20:11) [4]

Проблема только при работе в каталоге EXE-шника


 
TCrash ©   (2003-06-09 20:36) [5]

Что за проблема? при сканировании атрибутов какого файла?
Что-то я подозреваю, что только при чтении атрибутов exe-шника или dll-ок


 
panov ©   (2003-06-09 20:45) [6]

FindFirstFile
FindNextFile


 
Mystic ©   (2003-06-09 20:51) [7]

Привели код, который работает ошибочно


 
Anatoly P   (2003-06-10 12:50) [8]

Код тотже что в справке, только в Edit1.text путь, где лежит Exe-шник


 
Юрий Федоров ©   (2003-06-10 12:58) [9]

Альтернатива - IShellFolder

Так мы и не узнаем, в чем заключается ошибка при FindFirst ??



 
Palladin ©   (2003-06-10 13:05) [10]

А зачем нам знать?
Anatoly P признаный авторитет в области разработки приложений с максимальной плотностью ошибок, ему даже не нужно эту ошибку указывать, она точно есть, а вы дяденьки ищите думайте.


 
Домарощинер ©   (2003-06-10 13:15) [11]

Довольно интересный подход к выбору ника.
Сразу напрашивается ассоциация - Anatoly P</p>odgoretsky.
Но насколько мне известны привычки последнего, ему не свойственно искать ответы подобным образом.

С Уважением.


 
Anatoly P   (2003-06-10 13:39) [12]

что-то Вы тут мутите, а с этим я сталкивался 2 раза.


 
Игорь Шевченко ©   (2003-06-10 13:43) [13]

Anatoly P (10.06.03 13:39)

Код в студию!


 
Anatoly P   (2003-06-10 13:44) [14]

sss:=ExtractFileDir(Application.ExeName)+"\*.mye";
if findfirst(sss,FileAttrs, sr) = 0 then
repeat
if ((sr.Attr and FileAttrs) = sr.Attr) then
ComboBox1.Items.Add(sr.Name);
until FindNext(sr) <> 0;
FindClose(sr);

Вот код , до строки ComboBox1.Items.Add(sr.Name); не доходит


 
Anatoly P   (2003-06-10 13:45) [15]

Да еще, при переносе на диск c не NTFS, все работает как положено


 
Юрий Федоров ©   (2003-06-10 13:48) [16]

а FileAttrs проинициализировать не забыл ?


 
Игорь Шевченко ©   (2003-06-10 14:02) [17]

Anatoly P (10.06.03 13:44)

Мало кода


 
panov ©   (2003-06-10 14:02) [18]

Так какая ошибка-то происходит?

Это что - засекреченная информация или насмешка над всеми?


 
NailMan ©   (2003-06-10 14:12) [19]

if ((sr.Attr and FileAttrs) = sr.Attr) then
я всю сознательную программерскую жизнь не не видел чтобы сравнивали переменную модифицированную константой(опрератором and) c самой переменной. Обычно делают так:

if ((sr.Attr and FileAttrs) = FileAttrs) then




 
Palladin ©   (2003-06-10 14:17) [20]


> NailMan © (10.06.03 14:12)

зря ты так...


 
NailMan ©   (2003-06-10 14:40) [21]

To -> Palladin ©
Любите мучать? :-)


 
NailMan ©   (2003-06-10 14:43) [22]

Но мне тоже интересно в чем заключалась "некорректная работа на NTFS под WXP" и как этот код работал на FAT32 и под win9x.


 
sniknik ©   (2003-06-10 15:02) [23]

Anatoly P (10.06.03 13:44)
sss:=ExtractFileDir(Application.ExeName)+"\*.mye";
замени на
sss:=ExtractFileDir(Application.ExeName)+"*.mye";
и проверь
p.s.
"путь\\*.mye" не всегда находит, "путь\*.mye" всегда.


 
Palladin ©   (2003-06-10 16:00) [24]


> sniknik © (10.06.03 15:02)

ExtractFileDir возвращает без \
ExtractFilePath возвращает с \

> NailMan © (10.06.03 14:12)

условие наисано корректно, FileAttr скорее всего не инициализирован или у него просто нет прав на эту директорию...


 
Anatoly P   (2003-06-10 16:06) [25]

Повторяю:

Проблема только при работе в каталоге EXE-шника

Да еще, при переносе на диск c не NTFS, все работает как положено

И никаких насмешек!


 
Anatoly P   (2003-06-10 16:08) [26]

Не выполняется строка: ComboBox1.Items.Add(sr.Name);


 
Anatoly P   (2003-06-10 16:10) [27]

> Palladin © (10.06.03 16:00) А как эти права раздобыть? Скорее всего проблема в этом


 
Palladin ©   (2003-06-10 16:13) [28]

в свойствах папки смотри Permissions и
наконец покажи код выше строки
sss:=ExtractFileDir(Application.ExeName)+"\*.mye";
где у тебя FileAttr инициализируется!!



 
Anatoly P   (2003-06-10 16:15) [29]

ComboBox1.Clear;
FileAttrs:=faAnyFile;

Вот оно! И все


 
Игорь Шевченко ©   (2003-06-10 16:18) [30]

Anatoly P (10.06.03 16:15)

Дружище, мой тебе совет: возьми в руки отладчик, посмотри, что происходит при работе твоей программы в разных случаях и нам потом расскажи. Интересно ведь:))

FindFirst/FindNext отлично работают в WinXP в ЛЮБОМ каталоге, будь то каталог exe"шника или другой. Доказано Zanussi.



 
Юрий Федоров ©   (2003-06-10 16:21) [31]

Обрати наконец внимание на
NailMan © (10.06.03 14:12)


 
Palladin ©   (2003-06-10 16:22) [32]

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


 
Anatoly P   (2003-06-10 16:24) [33]

У меня дома XP - и никаких проблем, у клиента XP и когда программа лежит на диске с FAT - никаких проблем, а на NTFS, то о чем говорил
> Игорь Шевченко © (10.06.03 16:18) - Смотрел - обходит злополучную строку.

ЗЫ: В принципе для меня это не проблема - ведь есть и раздел с фат, но все же. Когда-нибудь столкнетесь - вспомните!


 
Anatoly P   (2003-06-10 16:26) [34]

> Palladin © (10.06.03 16:22)
sss:=ExtractFileDir(Application.ExeName)+"\*.mye";
Хоть убей, не перепутал


 
handra ©   (2003-06-10 16:31) [35]

Anatoly P (10.06.03 16:15)
ComboBox1.Clear;
FileAttrs:=faAnyFile;

Вот оно! И все

Таким образом ищутся папки (они же метки тома) с аттрибутами ReadOnly+System+Hidden, имеющие имя с маской "*.mye"! Вероятность их существования равна нулю ;)


 
handra ©   (2003-06-10 16:32) [36]

хотя нет, погорячился...


 
Мое имя (клоны все равно суксь)   (2003-06-10 16:32) [37]


> Palladin © (10.06.03 13:05)

;))))))))))

> NailMan © (10.06.03 14:12)


> я всю сознательную программерскую жизнь

значит на самом деле то была матрица...)))))))
что плохого в выражении if (i*1=i) ? ;-)


 
Игорь Шевченко ©   (2003-06-10 16:34) [38]

Anatoly P (10.06.03 16:24)

А почему обходит-то, расскажи, не стесняйся :) Чему равны значения, которые ты проверяешь в условии в одном и в другом случае ? Не молчи, партизан ты наш :))


 
Юрий Федоров ©   (2003-06-10 16:42) [39]

> NailMan © (10.06.03 14:12)
Блин, запутал... И я повелся :-)


 
Sandman25 ©   (2003-06-10 16:44) [40]

По-моему, единственное объяснение - не выполняется условие if.

Constant Value Description
faReadOnly $00000001 Read-only files
faHidden $00000002 Hidden files
faSysFile $00000004 System files
faVolumeID $00000008 Volume ID files
faDirectory $00000010 Directory files
faArchive $00000020 Archive files
faAnyFile $0000003F Any file

То есть в NTFS у найденного файла установлены не только младшие 6 бит установлены, но еще установлены какие-то старшие биты. И естественно при проверке $010000xx and $3f мы получаем $000000xx, что не равно исходному $010000xx.
Уберите проверку - она все равно не нужна.



Страницы: 1 2 3 вся ветка

Текущий архив: 2003.06.30;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.018 c
1-97579
npAKTuk
2003-06-12 10:39
2003.06.30
Ошибка матиматики


7-97896
Furyous
2003-04-16 16:09
2003.06.30
Проверка существования процесса.


1-97741
konstantinov
2003-06-17 23:19
2003.06.30
Как перехватить изменение размеров компонента?


14-97887
Сатир
2003-06-13 17:50
2003.06.30
---|Ветка была без названия|---


11-97562
SerB
2002-10-08 08:15
2003.06.30
Klyx & Kol & MCK