Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Внизподкаталоги Найти похожие ветки
← →
vasa777 (2012-05-21 23:15) [0]есть стриглист с путями (папки). можно ли как то определить (функция или алгоритм), является ли например для пути n(1) путь n(2) вхождением (подкаталогом) не прибегая к анализу строк?
← →
Ega23 © (2012-05-21 23:21) [1]Не всё так просто.
Создаём директорию D:\Temp, в ней создаём temp1
Запускаем cmd, выполняем команду subst z: d:\temp
Заносим в стринглист
sl.add("D:\Temp");
sl.add("Z:\temp1")
вуаля.
← →
Dennis I. Komarov © (2012-05-21 23:45) [2]
> Ega23 © (21.05.12 23:21) [1]
Не совсем корректно, т.е. для системы эти диски будут уже различны. Даже rm d:\*.* z:\ это будет полноценный copy-delete, а не изменение в FS.
ИМХО суть d:\1 и d:\1\2 но это строки, и на кой ляд напрягать FS вместо анализа строк мне не понятно...
← →
Dennis I. Komarov © (2012-05-21 23:47) [3]Не, понятно. На какого писать код, пусть система сама мне скажет...
← →
TStas (2012-05-21 23:54) [4]не прибегая к анализу строк? //А почему? Это и есть самый простой и надежный способ. Парсить строку до очередного слеша, выдергивать папки и сравнивать их 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:56) [5]
> ведь разные регистры букв - это не разные папки.
Это кто сказал? Мир на окнах не заканчивается, надо и дальше смотреть...
← →
vasa777 (2012-05-22 00:04) [6]хитрая проблема. еще тут вот нашел интересно: http://forum.vingrad.ru/forum/topic-329539.html
← →
Rouse_ © (2012-05-22 00:14) [7]
> А почему? Это и есть самый
> простой и надежный способ. Парсить строку до очередного
> слеша, выдергивать папки и сравнивать их ANsiCompareText,
> ведь разные регистры букв - это не разные папки. Ну и всё.
> Если какой-то из путей закончился, а несовпадений папок
> не было, то он подкаталог. Подкаталогом будет тот, кто короче:
> )
Вот эти пути указывают на одну и ту-же директорию. Распарси...
c:\windows\
file://c:/windows/
\.\c:\windows
\..\c:\windows
%SystemRoot%
← →
Германн © (2012-05-22 02:04) [8]
> vasa777 (22.05.12 00:04) [6]
>
> хитрая проблема.
Не столь хитрая, сколь дурацкая. Ибо озвучен только вопрос, но не задача.
← →
TStas (2012-05-22 02:34) [9]Розыч, ты прав. Просто про такие кучерявые пути не подумал.
← →
Давайте будем жрать! (2012-05-22 07:40) [10]
> Rouse_ © (22.05.12 00:14) [7]
C:\Windows\..\Windows туда же :-)
← →
DVM © (2012-05-22 10:03) [11]
> c:\windows\
> file://c:/windows/
> \.\c:\windows
> \..\c:\windows
> %SystemRoot%
← →
DVM © (2012-05-22 10:04) [12]
> DVM © (22.05.12 10:03) [11]
Не так уж страшен черт...
Просто надо привести все пути к единому виду. В WinApi кстати немало функций есть для этого.
← →
Давайте будем жрать! (2012-05-22 10:16) [13]
> В WinApi кстати немало функций есть для этого
Подскажи :-)
← →
han_malign (2012-05-22 11:26) [14]- не забывайте, что в Vista монтироваться могут не только диски но и произвольные пути...
SHParseDisplayName/IShellFolder::CompareIDs - вроде должно помочь
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.066 c