Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Посчитать количество файлов в папке

Ответить
Настройки темы
Посчитать количество файлов в папке

Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток ! Подскажите пожалуйста как можно посчитать количество файлов в папке ?

Отправлено: 09:14, 13-08-2009

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Lodoss, если без подкаталогов, то просто:
Код: Выделить весь код
#Include <File.au3>

$sFPath = @WindowsDir
$aFiles = _FileListToArray($sFPath, '*', 1)
$iFiles = $aFiles[0]

MsgBox(64, "Результат", 'В папке "'& $sFPath & '" найдено '& $iFiles &' файлов.')

Отправлено: 09:26, 13-08-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Благодарю ! А если с подкаталогами ? Думаю тоже пригодится.

Отправлено: 09:27, 13-08-2009 | #3


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Если папка пуста, вылетает ошибка Можно как нибудь её обойти ?

Отправлено: 10:06, 13-08-2009 | #4


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Lodoss:
Если папка пуста, вылетает ошибка »
Код: Выделить весь код
#Include <File.au3>

$sFPath = @WindowsDir
$aFiles = _FileListToArray($sFPath, '*', 1)
$iFiles = 0

If IsArray($aFiles) Then $iFiles = $aFiles[0]
MsgBox(64, "Результат", 'В папке "'& $sFPath & '" найдено '& $iFiles &' файлов.')
Цитата Lodoss:
А если с подкаталогами ? Думаю тоже пригодится. »
тут много вариантов можно напридумать:
Код: Выделить весь код
#Include <File.au3>

$sFPath = @WindowsDir
$iFiles = _FilesInFolder($sFPath)

MsgBox(64, "Результат", 'В папке "'& $sFPath & '" найдено '& $iFiles &' файлов.')

Func _FilesInFolder($sRoot)
    Local $aFolders = _FileListToArray($sRoot,'*', 2)
    Local $aFiles = _FileListToArray($sRoot,'*', 1), $iCount=0
    If IsArray($aFolders) Then
        For $i=1 To $aFolders[0]
            $iCount+= _FilesInFolder($sRoot &"\"& $aFolders[$i])
        Next
    EndIf
    If IsArray($aFiles) Then $iCount += $aFiles[0]
    Return $iCount
EndFunc
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:13, 13-08-2009 | #5


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Большущее спасибо !!! А то массивы ну никак не могу победить

Отправлено: 10:23, 13-08-2009 | #6


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Lodoss:
А то массивы ну никак не могу победить »
ИМХО это недоработка _FileListToArray(), т.к. пустая папка - нормальная ситуация, а не ошибочная, т.е. UDF в этом случае должна возвращать пустой массив... иначе, зачем было вообще заморачиваться массивом со счетчиком?

Отправлено: 11:22, 13-08-2009 | #7


Пользователь


Сообщения: 135
Благодарности: 32

Профиль | Отправить PM | Цитировать


Lodoss, Можно ещё так:
Код: Выделить весь код
$aInfo = DirGetSize(@WindowsDir, 1)
MsgBox(0,@WindowsDir,"Общий размер: " & Round($aInfo[0]/1024^2) & " MB" & @LF & _
"Кол-во файлов: " & $aInfo[1] & @LF & _
"Кол-во папок: " & $aInfo[2])
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:50, 16-08-2009 | #8


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Не стал создавать новую тему, так как вопрос, кажется, похожий, но чуть посложней.
Пытался написать скрипт, создающий древовидный список папок и файлов, но мозги закипают и ничего не выходит, кроме "вылетания" скрипта с ошибкой или неверного результата. Понятно, что надо использовать рекурсию, но пока до конца не разобрался.
Может, у кого есть готовое решение? :-)

Отправлено: 21:32, 20-08-2009 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Yoxcel, можно, конечно, и «FileFindFirstFile/FileFindNextFile», однако в этом случае, на мой взгляд, самое простое — пользовать не средства AutoIt, а библиотеку «Scripting.FileSystemObject»:
Код: Выделить весь код
$objFSO = ObjCreate("Scripting.FileSystemObject")
и делать сие по полной аналогии с известными скриптами vbscript:
Код: Выделить весь код
Local Const $DriveTypeFixed = 2

Local $objFSO
Local $objDrive


$objFSO = ObjCreate("Scripting.FileSystemObject")

For $objDrive In $objFSO.Drives()
	If $objDrive.DriveType = $DriveTypeFixed Then
		ScanFolders($objDrive.RootFolder)
	EndIf
Next

$objFSO = ""

Exit(0)
;=============================================================================

;=============================================================================
Func ScanFolders($objFolder)
	Local $objSubFolder
	Local $objFile

	; Перебирать можно как в нисходящей…
	ConsoleWrite("[" & $objFolder.Path & "]" & @CRLF)

	For $objFile In $objFolder.Files
		ConsoleWrite($objFile.Name & @CRLF)
	Next

	For $objSubFolder In $objFolder.SubFolders
		ScanFolders($objSubFolder)
	Next

	; …так и в восходящей последовательности.
	;ConsoleWrite("[" & $objFolder.Path & "]" & @CRLF)
	;
	;For $objFile In $objFolder.Files
	;	ConsoleWrite($objFile.Name & @CRLF)
	;Next
EndFunc
;=============================================================================
добирая недостающий функционал уже средствами самого AutoIt.

читать дальше »
Я часто удивляюcь, почему столь нередко забывают и обходят стороной одно из самых выдающихся достижений AutoIt — использование Automation.

Отправлено: 22:43, 20-08-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Посчитать количество файлов в папке

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - посчитать количество символов без пробела ShadowMas Программирование и базы данных 5 07-05-2009 10:51
WinApi||посчитать сколько файлов и папок на диске bezumes Программирование и базы данных 16 24-12-2006 12:08
Количество одновременно открытых файлов по сети inq Microsoft Windows 2000/XP 0 12-03-2006 21:40
По smb видно ограниченное количество файлов. Igor_I Общий по FreeBSD 12 27-11-2005 18:08
Увеличить количество одновременно открытых файлов Guest Microsoft Windows 95/98/Me (архив) 2 16-10-2002 16:16




 
Переход