![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
подкаталоги
vasa777 © (2012-05-21 23:15:00)есть стриглист с путями (папки). можно ли как то определить (функция или алгоритм), является ли например для пути n(1) путь n(2) вхождением (подкаталогом) не прибегая к анализу строк?
han_malign (2012-05-22 11:26:00) [1]- не забывайте, что в Vista монтироваться могут не только диски но и произвольные пути...
SHParseDisplayName/IShellFolder::CompareIDs - вроде должно помочь
Давайте будем жрать! (2012-05-22 10:16:00) [2]
> В WinApi кстати немало функций есть для этого
Подскажи :-)
DVM (2012-05-22 10:04:00) [3]
> DVM © (22.05.12 10:03) [11]
Не так уж страшен черт...
Просто надо привести все пути к единому виду. В WinApi кстати немало функций есть для этого.
DVM (2012-05-22 10:03:00) [4]
> c:\windows\
> file://c:/windows/
> \.\c:\windows
> \..\c:\windows
> %SystemRoot%
Давайте будем жрать! (2012-05-22 07:40:00) [5]
> Rouse_ © (22.05.12 00:14) [7]
C:\Windows\..\Windows туда же :-)
TStas (2012-05-22 02:34:00) [6]Розыч, ты прав. Просто про такие кучерявые пути не подумал.
Германн (2012-05-22 02:04:00) [7]
> vasa777 (22.05.12 00:04) [6]
>
> хитрая проблема.
Не столь хитрая, сколь дурацкая. Ибо озвучен только вопрос, но не задача.
Rouse_ (2012-05-22 00:14:00) [8]
> А почему? Это и есть самый
> простой и надежный способ. Парсить строку до очередного
> слеша, выдергивать папки и сравнивать их ANsiCompareText,
> ведь разные регистры букв - это не разные папки. Ну и всё.
> Если какой-то из путей закончился, а несовпадений папок
> не было, то он подкаталог. Подкаталогом будет тот, кто короче:
> )
Вот эти пути указывают на одну и ту-же директорию. Распарси...
c:\windows\
file://c:/windows/
\.\c:\windows
\..\c:\windows
%SystemRoot%
vasa777 (2012-05-22 00:04:00) [9]хитрая проблема. еще тут вот нашел интересно: http://forum.vingrad.ru/forum/topic-329539.html
Dennis I. Komarov (2012-05-21 23:56:00) [10]
> ведь разные регистры букв - это не разные папки.
Это кто сказал? Мир на окнах не заканчивается, надо и дальше смотреть...
TStas (2012-05-21 23:54:00) [11]не прибегая к анализу строк? //А почему? Это и есть самый простой и надежный способ. Парсить строку до очередного слеша, выдергивать папки и сравнивать их ANsiCompareText, ведь разные регистры букв - это не разные папки. Ну и всё. Если какой-то из путей закончился, а несовпадений папок не было, то он подкаталог. Подкаталогом будет тот, кто короче:)
Строки парсить поще некуда. К сточке приделывается переменная P: Integer.
Ln := Length(Str);
P := //откуда начали парсить. Если сначала, то 1, или от предыдущего слеша
InitP := P; //Запомнили, откуда начали парсить
While P <= Ln do
If Str[p] = '\' then
Begin
Ln := InitP - P - 1; //Сколько копируем
NextFolder := Copy(Str, InitP + 1, Ln); //Вот и папка
Break; //И не парсим боле
end
else
Inc(P)
Неужели можно ещё проще?
Dennis I. Komarov (2012-05-21 23:47:00) [12]Не, понятно. На какого писать код, пусть система сама мне скажет...
Dennis I. Komarov (2012-05-21 23:45:00) [13]
> Ega23 © (21.05.12 23:21) [1]
Не совсем корректно, т.е. для системы эти диски будут уже различны. Даже rm d:\*.* z:\ это будет полноценный copy-delete, а не изменение в FS.
ИМХО суть d:\1 и d:\1\2 но это строки, и на кой ляд напрягать FS вместо анализа строк мне не понятно...
Ega23 (2012-05-21 23:21:00) [14]Не всё так просто.
Создаём директорию D:\Temp, в ней создаём temp1
Запускаем cmd, выполняем команду subst z: d:\temp
Заносим в стринглист
sl.add('D:\Temp');
sl.add('Z:\temp1')
вуаля.