![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
точка в имени папки [D7, XP]
Ruzzz © (2007-12-10 21:37:00)Я так понимаю в имени папки в Windows нельзя использовать точку в конце и в начале? Где на сайте MS это можна узнать?
Это нужно для:
var
hFind: Integer;
FindFileData: WIN32_FIND_DATA;
begin
hFind := Windows.FindFirstFile(PChar(ParentDirectory + '*'), FindFileData);
if hFind <> INVALID_HANDLE_VALUE then begin
repeat
if FindFileData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
FilesList.Add(ParentDirectory + FindFileData.cFileName)
else
if FindFileData.cFileName[0] <> '.' then begin // !!! ВОТ
DirectoriesList.Add(ParentDirectory + FindFileData.cFileName + '\');
end;
until not Windows.FindNextFile(hFind, FindFileData);
Windows.FindClose(hFind);
end;
Можна ли надеятся что и в будущих версиях Windows это будет работать?
Ruzzz (2007-12-11 00:19:00) [1]if (true) then ЧТО-ТО и просто ЧТО-ТО думаю даст на asm одно и тоже - я про это
Плохиш (2007-12-11 00:03:00) [2]
> Ruzzz © (10.12.07 23:43) [9]
> или компилятору все равно
Компилятор интересует только соответствие синтаксису, а ваши извраты ему до лампочки...
> может посмотришь папку Document and Setting\User при наличии
> Д2006 ты сможешь там увидеть например папку .borland
Это началось с D7...
Ruzzz (2007-12-10 23:43:00) [3]может тогда вообще без if :) или компилятору все равно :)
antonn (2007-12-10 23:22:00) [4]а если сделать
if(true) then
будет еще быстрее! Представляешь, какая оптимизация? %))
Ruzzz (2007-12-10 23:12:00) [5]делаю так: (кстати меня удивило что хватает одного string :)
if (string(FindFileData.cFileName) <> '.') and ((FindFileData.
cFileName) <> '..') then begin ...
получаю:
lea eax,[ebp-$00000150]
lea edx,[ebp-$00000114]
mov ecx,$00000104
call @LStrFromArray
mov eax,[ebp-$00000150]
mov edx,$00451810
call @LStrCmp
jz +$71
lea eax,[ebp-$00000154]
lea edx,[ebp-$00000114]
mov ecx,$00000104
call @LStrFromArray
mov eax,[ebp-$00000154]
mov edx,$0045181c
call @LStrCmp
jz +$49
делаю так: ('.'=#2e)
if not((Word(FindFileData.cFileName[0]) = $002e) or ((Word (FindFileData.cFileName[0]) = $2e2e) and (FindFileData.cFileName[2] = #0))) then begin ...
получаю:
xor eax,eax
mov al,[ebp-$00000114]
cmp ax,$2e
jz +$60
xor eax,eax
mov al,[ebp-$00000114]
cmp ax,$2e2e
jnz +$09
cmp byte ptr [ebp-$00000112],$00
jz +$49
а если так:
not((FindFileData.cFileName[0] = '.') and ((FindFileData.cFileName[1] = #0) or (Word(FindFileData.cFileName[1]) = $002e)))
получаю:
cmp byte ptr [ebp-$00000114],$2e
jnz +$15
mov al,[ebp-$00000113]
test al,al
jz +$54
and eax,$000000ff
cmp ax,$2e
jz +$49
т.е. оптимизация на лицо!
Ruzzz (2007-12-10 22:30:00) [6]я про это нигде не читал, но хотел, поэтому и спрашивал где это в msdn найти, и на счет -точка в начале- ошибся, сам видел папки типа .borland и .Trash-ubuntu, но чота проглючило!
вообще хочу прогу оптимизировать поэтому исщу более быстрые способы.
я так понимаю " Do not end a file or directory name with a trailing space or a period. Although the underlying file system may support such names, the operating system does not" говорит о том что лучше и в конце точку не проверять, лучше действительно сравнивать с '..' и '.'
Cпасибо всем!
Anatoly Podgoretsky (2007-12-10 22:13:00) [7]
> Я так понимаю в имени папки в Windows нельзя использовать
> точку в конце и в начале?
Откуда ты такое прочитал или почему так думаешь, может посмотришь папку Document and Setting\User при наличии Д2006 ты сможешь там увидеть например папку .borland и не только ее.
Или например такую
C:\Documents and Settings\app\Application Data\Microsoft\.NET Framework Config
guav (2007-12-10 22:11:00) [8]Naming a File в MSDN:
Do not end a file or directory name with a trailing space or a period. Although the underlying file system may support such names, the operating system does not. You can start a name with a period (.).
Юрий Зотов (2007-12-10 22:06:00) [9]> Ruzzz © (10.12.07 21:37)
Чтобы на было проблем, проверяйте не первый символ имени, а все имя (на равенство '.' или '..').
Ruzzz (2007-12-10 22:02:00) [10]подскажите ссылку на сайте MS позжлста, или хоть по каким ключевым фразам искать
sniknik (2007-12-10 21:55:00) [11]в начале в виндовс можно, это в проводнике нельзя, а в виндовс...
т.что это и сейчас не будет всегда правильно работать