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

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

точка в имени папки [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]

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


Наверх

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