On-line: tnsr2, гостей 2. Всего: 3 [подробнее..]
АвторСообщение



Пост N: 17
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 25.07.14 21:03. Заголовок: Какие существуют библиотеки и функции для работы с файловой системой


Коллеги!
Просветите серость о наличии библиотек и функций для работы с файловой системой.
Я знаю функции adir(), directory(), но их функциональность сильно ограничена.
Если такие библиотеки и функции существуют, то как их можно найти.
И вообще где и как осуществляется поиск необходимого софта.
Заранее признателен


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 24 , стр: 1 2 All [только новые]


администратор




Пост N: 4106
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.07.14 21:33. Заголовок: evgeny2006 пишет: Я..


evgeny2006 пишет:

 цитата:
Я знаю функции adir(), directory(), но их функциональность сильно ограничена


Чем ограничена ? Пример покажи.
evgeny2006 пишет:

 цитата:
Если такие библиотеки и функции существуют, то как их можно найти


Поиском по тексту по сырцам Harbour

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 18
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 26.07.14 08:44. Заголовок: Dima пишет: Чем огр..


Dima пишет:

 цитата:
Чем ограничена ? Пример покажи.


Мне, например, требуется создать список (структуру) некоторой папки, имеющей
достаточно глубокую вложенность. Обращаю внимание, что требуется не список файлов, а именно список папок, вложенных
друг в друга. При этом хотелось бы знать дату последнего обновления папки.
Directory(), adir() - просто выдают список файлов в папке, при этом имеющиеся в папке другие папки не выдаются!


 цитата:
Поиском по тексту по сырцам Harbour


А аннотации или краткие описания где-нибудь существуют?


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 19
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 26.07.14 08:58. Заголовок: Dima пишет: Поиском..


Dima пишет:

 цитата:
Поиском по тексту по сырцам Harbour


Вопрос не совсем праздный!
Если где-то можно достаточно быстро найти что-то похожее, что тебе нужно, то имеет смысл поискать!
Если же необходимо копаться, без уверенности, что найдешь то, что нужно, то имеет смысл взять и написать самому

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4107
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.07.14 09:42. Заголовок: Directory() - Запол..


 
Directory() - Заполнение массива информацией о файлах по указанному пути.
Синтаксис

Directory( [<cDirectory>], [<cAttribute>] ) --> aDirectory

Параметры
<cDirectory>

<cDirectory> - символьная строка, которая указывает диск, каталог и файл. Полученная информация считывается в массив. Можно определить маску файла, подставив символы * или ?. Если параметр <cDirectory> не определен, используется *.*. При такой маске считывается вся информация о файлах текущего пути.

<cAttribute>
Этот дополнительный атрибут расширяет информацию о файле, помещенном в массив. <cAttribute> состоит из одного и более следующих символов: "D","H","S","V". Ниже представлены правильные значения для <cAttribute>:

Атрибут Значение Действие
--------------------------------------------------------------
D Directory В массив включаются имена каталогов
H Hidden В массив включаются скрытые файлы
S System В массив включаются системные файлы
V Volume В массив включается имя диска, игнорируя файлы
Возвращаемое значение функции
Возвращаемое значение Directory() состоит из двумерного массива, в котором каждый элемент является подмассивом, содержащем информацию об очередном файле, выбранном в соответствии с аргументом <cDirectory>. Колонки массива могут быть установлены символическими константами, определенными в файле Directry.ch. Содержимое каждой колонки массива предоставлено в следующем таблице:

Константа Cодержимое Тип данных
--------------------------------------------------------------
F_NAME имя файла C
F_SIZE размер файла N
F_DATE дата последнего изменения D
F_TIME время последнего изменения C
F_ATTR атрибут файла C

(скрытый, системный...)


Если в <cDirectory> указан не правильный путь или спецификация файла, или вообще не найдено никаких соответствующих файлов, возвращается пустой массив.

Описание

Функция управления окружающей средой Directory() предоставляют информацию обо всех или выбранных файлах по указанному пути.

#include: Directry.ch

Смотрите также: AEval(), FClose()

ПРИМЕР-1:

// Directory()

// В примере определяется количество байт,
// занимаемых файлами DBF в текущем каталоге.


#include "Directry.ch"

PROCEDURE Main
LOCAL aDbfFiles := Directory("*.DBF")
LOCAL nCount := Len(aDbfFiles)
LOCAL n, nSum
nSum := 0
FOR n:= 1 TO nCount
nSum += aDbfFiles[ n, F_SIZE ]
NEXT
? nCount, "DBF файлы знаимают", nSum, "байт"
RETURN

-------------------------------------------------------

ПРИМЕР-2:
// В примере все PRG файлы сортируются по имени файла,
// а вся полученная о них информация заносится в файл вывода.

PROCEDURE Main
LOCAL aPrgFiles := Directory("*.PRG")
// сортировка массива по имени
ASort( aPrgFiles,,, {|a1,a2| a1[ F_NAME ] < a2[ F_NAME ] } )
// вывод данных на принтер и параллельно в файл
SET PRINTER TO Prglist.txt
SET PRINTER ON

// вывод массива
AEval( aPrgFiles, ;
{|a| QOut( PadR( a[ F_NAME ], 30 ) , ;
a[ F_SIZE ] , ;
a[ F_DATE ] , ;
a[ F_TIME ] , ;
a[ F_ATTR ] ) } )

SET PRINTER TO
SET PRINTER OFF
RETURN



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 20
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 26.07.14 11:01. Заголовок: Dima пишет: Direct..


Dima пишет:

 цитата:
Directory() - Заполнение массива информацией о файлах по указанному пути


Спасибо за ответ, но я так и делал.
Я взял пример FillDirList, добавил несколько строк, выводящих сообщения о значениях параметров F_SIZE, F_DATE и стал его тестировать.
Выводится список имен файлов. Список папок - не выводится. Параметры F_SIZE, F_DATE - пустые. Стал копать дальше,
набрел на функцию FileDate(), но найти способ получить перечень папок не смог.
Отсюда вопрос и возник!

Запускал программу в двух вариантах:
aDirList := Directory( cDIRName )
и
aDirList := Directory( cDIRName,"D" )
но результат - одинаков

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 259
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.07.14 12:02. Заголовок: evgeny2006 пишет: н..


evgeny2006 пишет:

 цитата:
но найти способ получить перечень папок не смог.



#include "Directory.ch"
FUNC Main()
aDirectory := DIRECTORY("*.*", "D")
AEVAL( aDirectory, { |aFile| IF( aFile[F_ATTR] == "D", QOUT( aFile[F_NAME] + " - " + DTOC(aFile[F_DATE]) ), NIL )} )
RETURN NIL

Вложенные папки искать рекурсией

PS видимо следует начать с изучения основ языка. В папке harbour из поставки есть файл справки

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 21
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 26.07.14 13:56. Заголовок: Haz пишет: PS видим..


Haz пишет:

 цитата:
PS видимо следует начать с изучения основ языка. В папке harbour из поставки есть файл справки


Это всего лишь help, а не осровы языка
Спасибо за ответ

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 22
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 26.07.14 14:05. Заголовок: Haz пишет: Вложенны..


Haz пишет:

 цитата:
Вложенные папки искать рекурсией


Для этого надо хотя бы найти папку

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 306
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 26.07.14 14:33. Заголовок: evgeny2006 пишет: Д..


evgeny2006 пишет:

 цитата:
Для этого надо хотя бы найти папку



Евгений.
Я работал с Фоксом начиная с Foxbase более 20 лет, проблем с переходом на (x)Harbour проблем не возникает никаких если знаете язык xBase и C.
Я бы на вашем месте скачал файл помощи для xHarbour , там есть полный список всех функций, процедур для работы с файловой системой и не только.
Все функции практически идентичны с Harbour.
Если например нужно помощь по самому языку, то есть файл помощи на русском языке по внутреннему языку системы Бест 5.
Всё можна скачать здесь : http://code.google.com/p/santysoft/downloads/list

Если хотите класы для работы с файловой системой, нужно идти на форумы : pctoledo, hmg, fivewin, xailer, xHarbour.com и там искать.
Есть много всяких вариантов в библиотеке Григория Филатова minigui, или Александра Кресина HWGUI(http://sourceforge.net/projects/hwgui/),
oohg (http://sourceforge.net/projects/oohg/).

Вариантов много.





Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 23
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 26.07.14 14:36. Заголовок: Haz пишет: #include..


Haz пишет:

 цитата:
#include "Directory.ch"


За участие - большое спасибо!
В #include библиотека указана с ошибкой. Я выполнил пример, приведенный Вами, но результат тот же самый!
Т.е. функция directory() работает неправильно!!!
Она не определяет ни директории, ни параметры F_DATE.
Кстати, забыл упомянуть, что я работаю на Windows 7.

Я снова возвращаюсь к первоначальному вопросу:"Существуют ли дополнительные библиотеки или функции для работы с файловой системой."


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4108
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.07.14 14:48. Заголовок: evgeny2006 пишет: В..


evgeny2006 пишет:

 цитата:
В #include библиотека указана с ошибкой


надо directry.ch

ЗЫ
Пример рабочий , Windows XP SP3

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 24
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 26.07.14 14:53. Заголовок: santy пишет: Я рабо..


santy пишет:

 цитата:
Я работал с Фоксом начиная с Foxbase более 20 лет


Я примерно как двадцать лет назад написал последнюю программу на Клиппер, хотя более менее ориентируюсь в функциях языка, и вопрос поднял
в связи с неработоспособностью конкретной функции.
Вообще мой стаж программирования приближается к 50 годам, хотя последние 20 лет я провел на административных должностях.
При этом не утратил интерес к программированию. Правда львиная доля задач была связана с численными методами.
Большое спасибо за участие!!!

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 25
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 26.07.14 15:38. Заголовок: santy пишет: Если н..


santy пишет:

 цитата:
Если например нужно помощь по самому языку, то есть файл помощи на русском языке по внутреннему языку системы Бест 5.
Всё можна скачать здесь : http://code.google.com/p/santysoft/downloads/list


Я уже попадал на этот сайт и что-то даже брал отсюда. Но уж очень поспешно. Я недооценил этот сайт!
Зашел повторно. Создал закладку на всякий случай.
Вопрос. Приводятся ссылки на Борланд 5.82 . Я уже успел почитать, что он платный.
Есть ли какие-либо преимушества от его использование?

Большое спасибо за добротную ссылку!!!


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 26
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 26.07.14 15:49. Заголовок: Dima пишет: Пример ..


Dima пишет:

 цитата:
Пример рабочий , Windows XP SP3


Возможно, что пример и рабочий. Никто не мешает взять и переименовать библиотеку.
Я привожу название программы из комплекта поставки (папка FillDirList). которую я использовал
для проверки работоспособности функции directory().
Разве трудно взять этот пример один к одному и прогнать его. Вы тогда убедитесь в неработоспособности этой фукции.

В любом случае, большое спасибо, что откликнулись.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4109
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.07.14 15:57. Заголовок: evgeny2006 пишет: Я..


evgeny2006 пишет:

 цитата:
Я привожу название программы из комплекта поставки (папка FillDirList)


Это из Минигуи ?

Да есть такая. Проверил. Работает нормально.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 260
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.07.14 17:54. Заголовок: evgeny2006 пишет: Я..


evgeny2006 пишет:

 цитата:
Я взял пример FillDirList, добавил несколько строк, выводящих сообщения о значениях параметров F_SIZE, F_DATE и стал его


может все дело в этих строчках ???
без них FillDirList работает в соответствии с его кодом.

Скиньте свой простой неработающий пример,все его посмотрят а то мы тут телепатией занимаемся.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 27
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 27.07.14 08:48. Заголовок: Haz пишет: Скиньте ..


Haz пишет:

 цитата:
Скиньте свой простой неработающий пример,все его посмотрят а то мы тут телепатией занимаемся.


Привожу текст примера, в который вставлен и Ваш код, только закомментированный.
Поскольку все выполняется в цикле, желательно создать тестовую папку с вложенными папками.
Это только один из вариантов примера.
Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 261
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.07.14 09:13. Заголовок: evgeny2006 пишет: Э..


evgeny2006 пишет:

 цитата:
Это только один из вариантов примера



опять повторюсь - Ваш пример работает ПРАВИЛЬНО и по той логике которую вы туда вложили -
работа ТОЛЬКО по выбранной папке БЕЗ включения в массив имен вложенных папок и БЕЗ их сканирования!!!!!!!!!!!

Советую посмотреть из пример Samples\Advanced\Fileman из поставки минигуи, от основан на использовании функции Directory()
а потом убеждать всех что функция не работает

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 30
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 27.07.14 11:11. Заголовок: Haz пишет: работа Т..


Haz пишет:

 цитата:
работа ТОЛЬКО по выбранной папке БЕЗ включения в массив имен вложенных папок и БЕЗ их сканирования


Насчет сканирования Вы правы. Я не ставил на данном этапе сканирование вложенных папок.
Мне нужно было определиться - есть вложенная папка или нет. В пример включена предложенная Вами команда
анализа на наличие директория

AEVAL( aDirList, { |aFile| IF( aFile[F_ATTR] == "D", msgbox( aFile[F_NAME] + " - " + DTOC(aFile[F_DATE]) ), NIL )} )

У меня в исходной папке имеются еще три вложенные папки, но они не индетифицируются!!!
Судя по Вашему комментарию (со многими восклицательными знаками), собака зарыта в команде

cDIRName += "\*.*"

После того, как Вам отвечу - обязательно проверю!
Если это так, как Вы говорите, буду посыпать голову пеплом и каяться во всех грехах.
Это кстати связано с тем, как пишутся книги.
Haz пишет:

 цитата:
Советую посмотреть из пример Samples\Advanced\Fileman


За совет - спасибо!
Что касается убеждения - то это не совсем так. Я просто хотел предупредить тех, кто с этим столкнется, о наличии проблемы.
Кстата, я этого достиг и в описание функции следует внести необходимые изменения.

Большое спасибо за Вашу помощь111

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 262
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.07.14 11:47. Заголовок: не надо голову ничем..


не надо голову ничем посыпать. Давайте просто зафиксируем что функция Directory() работает как ей и положено, а это значит что она
принимает точку входа и атрибуты которые учитываются при заполнении массива и возвращает заполненный массив.
При этом если атрибуты явно не указаны - то в массив попадут только обычные файлы ( т.е. не папки , не скрытые или системные, не метки тома и пр )
именно так и поступает пример FillDirList.

Если ваша задача просканировать папки с волженными и получить дату создания то вот простой код.

#include "Directry.ch"
//
FUNC Main()
LOCAL cCurDir := "C:\"
SETCANCEL(.T.) // ALT-C
DirScan( cCurDir )
RETURN NIL


FUNC DirScan( cDir )
LOCAL aDirectory := DIRECTORY(cDir + "*.*" , "D")
LOCAL cCurDir := ""
LOCAL i := 0

FOR i := 1 TO LEN( aDirectory)
IF !("." $ aDirectory[F_NAME] )
IF aDirectory[F_ATTR] == "D"
cCurDir := SUBSTR(cDir, 1, RAT("\", cDir)+1) + aDirectory[F_NAME] + "\"
? PADR( cCurDir, 50, " "), " Created date:", aDirectory[F_DATE]
DirScan( cCurDir )
inkey(0.01)
END
END
END

RETURN NIL






Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 31
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 27.07.14 12:22. Заголовок: Haz пишет: опять по..


Haz пишет:

 цитата:
опять повторюсь - Ваш пример работает ПРАВИЛЬНО и по той логике которую вы туда вложили



Посмотрел fileman.prg. Похоже, что меня просто подвела память, поскольку лет 20-25 назад я уже применял
эту команду. Затрудняюсь вспомнить, в связи с чем. В те годы я мог использовать или dbase, или foxbase, или foxpro.
Но как мне кажется, обращение было простое, а в FileMan - уж сильно наворочено.
Следуя логики функции, она должна бы выдать содержимое папки, включая имена вложенных папок.
FileMan.prg показывает как достучаться до имен.

Спасибо за помощь!


Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 623
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 27.07.14 14:17. Заголовок: evgeny2006 пишет: м..


evgeny2006 пишет:

 цитата:
меня просто подвела память


Просто замечание: почему все жалуются на свою память, но никто не жалуется на свой ум
Вопрос, конечно, риторический...

evgeny2006 пишет:

 цитата:
Я знаю функции adir(), directory(), но их функциональность сильно ограничена.


Вывод: сначала изучите примеры, а затем делайте глубокомысленные заявления, что кто-то что-то скрывает от Вас

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 33
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 27.07.14 16:32. Заголовок: Haz пишет: Если ваш..


Haz пишет:

 цитата:
Если ваша задача просканировать папки с волженными и получить дату создания то вот простой код.


Да. Примерно в этом состояла задача. Спасибо Вам большое!!!
Я стал примерно вспоминать ситуацию использования этой функции давным-давно назад.
Вначале, что-то не пошло и я стал выводить в интерактивном режиме результаты своих действий.
Так я попал на вывод точки (.) при использование adir(). По-моему, тогда не было функции directory().
хотя я возможно и ошибаюсь.
Зачем я это излагаю. Для того чтобы задать очередной вопрос.
С помощью hbrun.exe у меня выводится информация на консоль, правда в ужасном виде.
При компиляции же с помощью .bat файла на консоль ничего не выводится.

Что существует и чем лучше воспользоваться для вывода результатов (как правило отладочных) на консоль?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 264
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.07.14 16:42. Заголовок: evgeny2006 пишет: с..


evgeny2006 пишет:

 цитата:
с помощью .bat файла на консоль ничего не выводится.


ответил в той ветке /C добавьте

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 24 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 647
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет