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

Вниз

точка в имени папки   Найти похожие ветки 

 
Ruzzz ©   (2007-12-10 21:37) [0]

Я так понимаю в имени папки в 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 это будет работать?


 
sniknik ©   (2007-12-10 21:55) [1]

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


 
Ruzzz ©   (2007-12-10 22:02) [2]

подскажите ссылку на сайте MS позжлста, или хоть по каким ключевым фразам искать


 
Юрий Зотов ©   (2007-12-10 22:06) [3]

> Ruzzz ©   (10.12.07 21:37)

Чтобы на было проблем, проверяйте не первый символ имени, а все имя (на равенство "."  или "..").


 
guav ©   (2007-12-10 22:11) [4]

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 (.).


 
Anatoly Podgoretsky ©   (2007-12-10 22:13) [5]


> Я так понимаю в имени папки в Windows нельзя использовать
> точку в конце и в начале?  

Откуда ты такое прочитал или почему так думаешь, может посмотришь папку Document and Setting\User при наличии Д2006 ты сможешь там увидеть например папку .borland и не только ее.
Или например такую
C:\Documents and Settings\app\Application Data\Microsoft\.NET Framework Config


 
Ruzzz ©   (2007-12-10 22:30) [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пасибо всем!


 
Ruzzz ©   (2007-12-10 23:12) [7]

делаю так: (кстати меня удивило что хватает одного 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


т.е. оптимизация на лицо!


 
antonn ©   (2007-12-10 23:22) [8]

а если сделать
if(true) then
будет еще быстрее! Представляешь, какая оптимизация? %))


 
Ruzzz ©   (2007-12-10 23:43) [9]

может тогда вообще без if :) или компилятору все равно :)


 
Плохиш ©   (2007-12-11 00:03) [10]


> Ruzzz ©   (10.12.07 23:43) [9]
> или компилятору все равно

Компилятор интересует только соответствие синтаксису, а ваши извраты ему до лампочки...

> может посмотришь папку Document and Setting\User при наличии
> Д2006 ты сможешь там увидеть например папку .borland

Это началось с D7...


 
Ruzzz ©   (2007-12-11 00:19) [11]

if (true) then ЧТО-ТО и просто ЧТО-ТО думаю даст на asm одно и тоже - я про это



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

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

Наверх




Память: 0.49 MB
Время: 0.014 c
2-1197204556
istok
2007-12-09 15:49
2008.01.06
Запись в файл на winapi


2-1197356647
dumka
2007-12-11 10:04
2008.01.06
Строки


15-1196738725
Slider007
2007-12-04 06:25
2008.01.06
С днем рождения ! 4 декабря 2007 вторник


2-1197148139
Lip
2007-12-09 00:08
2008.01.06
Транспонирование матрицы не заводя новой матрицы


9-1163873357
Masterok
2006-11-18 21:09
2008.01.06
delphix - undeclared identifier angle