Форум: "Начинающим";
Текущий архив: 2008.01.06;
Скачать: [xml.tar.bz2];
Внизточка в имени папки Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c