Главная страница
    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.066 c
8-1227079093
Andrey_ka
2008-11-19 10:18
2013.03.22
как заставить окно перерисовываться?


15-1347476011
ussr
2012-09-12 22:53
2013.03.22
OpenGL


4-1259064819
Leonid Troyanovsky
2009-11-24 15:13
2013.03.22
Как заставить GUI thread создать нужное мне окно?


2-1331751635
White
2012-03-14 23:00
2013.03.22
Сбивается БД


2-1339663763
Zheksonz
2012-06-14 12:49
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский