Вверх ↑
Этот топик читают: Гость
Ответов: 537
Рейтинг: 14
#1: 2023-07-29 09:47:43 ЛС | профиль | цитата
Нужно узнать имя папки в которой находится файл. Допустим есть такой путь C:\Users\User\Desktop\Trends\cache\000003.log нужно узнать что файл 000003.log лежит в папке cache. Задача на первый взгляд простая, но я не нашел способ как получить название папки, через регулярку тоже не получается, находит почему то только последний слеш

Add(Memo,2026983,315,378)
{
Width=388
Height=313
ScrollBars=3
}
Add(MainForm,2953706,56,322)
{
Width=423
Height=517
}
Add(FileSearch,13996461,154,322)
{
Ext="*log"
}
Add(Button,8934770,154,371)
{
Left=170
Top=350
Data=String(C:\Users\User\Desktop\Trends\cache\000003.log)
link(onClick,7278360:doEvent1,[])
}
Add(Browse,12434277,98,322)
{
NewStyle=0
link(onBrowse,13996461:doSearch,[])
}
Add(RE_Search,1530893,259,378)
{
link(onMatch,2026983:doAdd,[])
link(Expression,14333510:Text,[])
}
Add(Edit,14333510,266,329)
{
Left=10
Top=315
Width=380
Height=25
Font=[MS Sans Serif,10,1,0,1]
Text="[\\\.*\\\$]"
}
Add(Hub,7278360,203,371)
{
link(onEvent1,2026983:doClear,[(301,377)(301,391)])
link(onEvent2,1530893:doExec,[])
}

карма: 4

0
Ответов: 8915
Рейтинг: 823
#2: 2023-07-29 11:43:40 ЛС | профиль | цитата
Sersey, так что-ли:
Так


Add(MainForm,2953706,84,56)
{
Left=100
Top=50
}
Add(FileSearch,9188594,154,161)
{
Ext=""
Dir="C:\"
Include=2
link(onSearch,3834769:doCompare,[])
link(Ext,10609263:FString,[(160,152)(258,152)])
}
Add(Button,16239531,77,154)
{
Left=10
Top=40
link(onClick,10167071:doEvent1,[])
}
Add(Edit,1614219,154,56)
{
Left=10
Top=10
Width=115
Text="РыбалкаURL.txt"
link(onChange,14854963:doSplit,[])
}
Add(Edit,1764439,287,168)
{
Left=80
Top=40
Width=295
}
Add(StrMask,3834769,210,161)
{
Point(doMask)
link(onTrue,517151:doEvent1,[])
}
Add(FormatStr,11537709,154,105)
{
DataCount=1
Mask="*%1*"
Point(FString)
link(onFString,3834769:doMask,[(193,111)(193,174)])
link(Str1,1614219:Text,[])
}
Add(Hub,10167071,119,154)
{
link(onEvent1,11537709:doString,[(144,160)(144,111)])
link(onEvent2,9188594:doSearch,[])
}
Add(MultiStrPart,14854963,203,56)
{
Char="."
link(onSplit,10609263:doString,[])
}
Add(Hub,517151,252,168)
{
link(onEvent1,1764439:doText,[])
link(onEvent2,9188594:doStop,[(277,181)(277,202)(144,202)(144,174)])
}
Add(FormatStr,10609263,252,56)
{
DataCount=1
Mask="*.%1"
Point(FString)
link(Str1,14854963:Part2,[(258,47)(244,47)(244,96)(216,96)])
}

карма: 19

0
Ответов: 537
Рейтинг: 14
#3: 2023-07-29 12:06:01 ЛС | профиль | цитата
Программа при нажатии на кнопку просто зависла намертво. Проверял на win10 64



Редактировалось 1 раз(а), последний 2023-07-29 12:08:15
карма: 4

0
Ответов: 2236
Рейтинг: 676
#4: 2023-07-29 12:33:29 ЛС | профиль | цитата
Sersey, а что делает схема из первого поста или это по принципу: я тут накидал пару элементов, разберитесь сами? Планируется перебирать весь диск С или все же конкретную папку?
карма: 11

0
Ответов: 8915
Рейтинг: 823
#5: 2023-07-29 12:39:09 ЛС | профиль | цитата
Sersey писал(а):
зависла намертво
А вы ввели имя файла с расширением перед нажатием на кнопку?
карма: 19

0
Ответов: 2236
Рейтинг: 676
#6: 2023-07-29 12:58:34 ЛС | профиль | цитата
Леонид, поток:

Add(MainForm,15196181,392,175)
{
Left=100
Top=50
}
Add(FileSearch,9188594,462,280)
{
Ext=""
Dir="C:\"
Include=2
link(onSearch,3834769:doCompare,[])
link(onEndSearch,8717748:doMessage,[(496,293)(496,328)])
link(Ext,10609263:FString,[(468,271)(566,271)])
}
Add(Button,16239531,343,273)
{
Left=10
Top=40
link(onClick,10167071:doEvent1,[])
}
Add(Edit,1614219,462,175)
{
Left=10
Top=10
Width=115
Text="РыбалкаURL.txt"
link(onChange,14854963:doSplit,[])
}
Add(Edit,1764439,595,287)
{
Left=80
Top=40
Width=295
}
Add(StrMask,3834769,518,280)
{
Point(doMask)
link(onTrue,517151:doEvent1,[])
}
Add(FormatStr,11537709,462,224)
{
DataCount=1
Mask="*%1*"
Point(FString)
link(onFString,3834769:doMask,[(501,230)(501,293)])
link(Str1,1614219:Text,[])
}
Add(Hub,10167071,385,273)
{
link(onEvent1,11537709:doString,[(452,279)(452,230)])
link(onEvent2,1337693:doStart,[])
}
Add(MultiStrPart,14854963,511,175)
{
Char="."
link(onSplit,10609263:doString,[])
}
Add(Hub,517151,560,287)
{
link(onEvent1,1764439:doText,[])
link(onEvent2,9188594:doStop,[(585,300)(585,321)(452,321)(452,293)])
}
Add(FormatStr,10609263,560,175)
{
DataCount=1
Mask="*.%1"
Point(FString)
link(Str1,14854963:Part2,[(566,166)(552,166)(552,215)(524,215)])
}
Add(Thread,1337693,413,280)
{
Delay=1
FastStop=0
link(onExec,9188594:doSearch,[])
}
Add(Message,8717748,511,322)
{
}
карма: 11

0
Ответов: 537
Рейтинг: 14
#7: 2023-07-29 14:41:48 ЛС | профиль | цитата
Программа ищет определенные файлы в папках с вложениями, расширение файла известно, сначала нужно найти все файлы, а потом брать путь к файлу по одному и как то узнать в какой папке находится файл. Например если такой путь C:\Users\User\Desktop\Trends\cache\000003.log то нужно программно получить название этой папки \cache\. Должно быть что то простое или регуляркой получать или так как компонент FilePathElm это делает, только он работает только с названием файла, а нужно получить папку в которой лежит файл
Начало программы такое
Add(MainForm,15196181,133,231)
{
Left=100
Top=50
}
Add(Button,16239531,133,280)
{
Top=5
link(onClick,339707:doBrowse,[])
}
Add(Browse,339707,189,280)
{
NewStyle=0
link(onBrowse,9982559:doSearch,[])
}
Add(FileSearch,9982559,238,280)
{
Ext="*.xls"
link(onSearch,5664480:doAdd,[])
}
Add(Memo,5664480,294,280)
{
Left=5
Top=35
Width=375
Height=225
ScrollBars=3
}

Далее нужно записать в таблицу и полный путь к файлу и в другую колонку записать название папки где лежит каждый найденный файл

Редактировалось 2 раз(а), последний 2023-07-29 14:49:24
карма: 4

0
Ответов: 8915
Рейтинг: 823
#8: 2023-07-29 14:55:09 ЛС | профиль | цитата
sla8a, и с Thread, и без него время поиска почти одинаково, нагрузка процессора тоже, а вот количество найденных файлов почему-то резко отличается, с Thread выдаёт ~5000 шт, а без него аж ~300000 шт , т.е. поиск продолжается на время вывода сообщения в Edit.
Чтобы избавится от этого надо перекинуть выходы у Hub, пусть сначала остановит поиск, а потом выводит имя файла. Thread эту операцию как раз и синхронизирует

--- Добавлено в 2023-07-29 15:07:22

Sersey писал(а):
Нужно узнать имя папки в которой находится файл

Нужно вдумчивее обозначать хотелку, а у вас файл в единственном числе
Ну и в чём задача -- найти все файлы и выделить из полного пути имя файла с последней папкой или ещё рассортировать если в одной папке найдётся несколько файлов

Редактировалось 1 раз(а), последний 2023-07-29 15:07:22
карма: 19

0
Ответов: 2236
Рейтинг: 676
#9: 2023-07-29 15:28:33 ЛС | профиль | цитата
Sersey, видно вы не видите моих сообщений или не читаете их, но может это хоть пройдет:

Add(MainForm,15196181,371,126)
{
Left=100
Top=50
Width=1046
Height=306
}
Add(Button,16239531,371,175)
{
Top=5
link(onClick,9982559:doSearch,[])
}
Add(FileSearch,9982559,413,175)
{
Ext="*.exe"
Dir="c:\Games"
link(onSearch,3617781:doEvent1,[])
}
Add(MultiStrPart,11958516,483,119)
{
Char="\"
Direct=1
}
Add(StringTable,16351932,539,182)
{
Left=5
Top=30
Width=1025
Height=230
Columns=#8:Путь=400|9:Папка=200|8:Файл=200|
}
Add(Hub,3617781,455,175)
{
link(onEvent1,11958516:doSplit,[(476,181)(476,125)])
link(onEvent2,16276692:doString,[])
}
Add(FormatStr,16276692,483,182)
{
DataCount=3
Mask="%3;%2;%1"
link(onFString,16351932:doAdd,[])
link(Str1,11958516:Part1,[])
link(Str2,11958516:Part2,[])
}
Леонид, без потока:
Sersey писал(а):
Программа при нажатии на кнопку просто зависла намертво. Проверял на win10 64

у меня тоже, а с потоком у меня на такой же система ищет. По поводу Sersey сказать сложно, он или не видит мои сообщения или не читает. То что схему с потоком надо оптимизировать даже не обсуждается.
карма: 11

0
Ответов: 537
Рейтинг: 14
#10: 2023-07-29 15:38:30 ЛС | профиль | цитата
Последнее это то что нужно, благодарю. Просто и быстро
карма: 4

0
Ответов: 246
Рейтинг: 4
#11: 2023-07-31 23:02:29 ЛС | профиль | цитата
Еще вот такой вариант один компонент

Add(MainForm,15196181,406,266)
{
Left=100
Top=50
Width=779
Height=241
}
Add(Button,16239531,406,315)
{
Top=5
link(onClick,9982559:doSearch,[])
}
Add(FileSearch,9982559,462,315)
{
Ext="*.exe"
Dir="c:\games"
Point(ShortName)
link(onSearch,11302234:doEvent1,[])
}
Add(Str_Enum,7700224,560,350)
{
Delimiter="\"
From=2
Direct=1
link(onEnum,14108301:doEvent1,[])
}
Add(HubEx,4630657,644,329)
{
link(onEvent,2959938:doAdd,[])
}
Add(Hub,14108301,609,350)
{
link(onEvent1,4630657:doWork3,[(648,356)])
link(onEvent2,7700224:doStop,[(633,363)(633,392)(548,392)(548,363)])
}
Add(Hub,11302234,511,315)
{
link(onEvent1,4630657:doWork1,[(648,321)])
link(onEvent2,7700224:doEnum,[(543,328)(543,356)])
}
Add(ListBox,2959938,672,329)
{
Left=20
Top=30
Width=730
Height=170
}

карма: 1

0
11
Сообщение
...
Прикрепленные файлы
(файлы не залиты)