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

Вниз

подкаталоги   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
15-1333917002
Юрий
2012-04-09 00:30
2013.03.22
С днем рождения ! 9 апреля 2012 понедельник


15-1337667020
AV
2012-05-22 10:10
2013.03.22
Oracle/ Надо прибить сессии, использующие пакет


2-1334647596
ChainikDenis
2012-04-17 11:26
2013.03.22
TreeView и база данных


15-1352478014
Chorus
2012-11-09 20:20
2013.03.22
Извините. Последний вопрос по C++


4-1261045077
Гном11
2009-12-17 13:17
2013.03.22
Что вместо WinSingt в Delphi 2006