Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.086 c
2-1338055199
vasa777
2012-05-26 21:59
2013.03.22
версия дельфи


15-1331145882
Dimka Maslov
2012-03-07 22:44
2013.03.22
Чё то до меня не доходит?


15-1354038522
Дмитрий С
2012-11-27 21:48
2013.03.22
Менеджер паролей.


15-1339778375
TUser
2012-06-15 20:39
2013.03.22
Лапша


15-1344028545
Германн
2012-08-04 01:15
2013.03.22
Комедии.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский