сколько файлов в каталоге?

Все, что вы хотели знать о программизме, но боялись спросить.
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8563
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

сколько файлов в каталоге?

Сообщение папа Карло »

Как посчитать число файлов в каталоге. Рекурсии в подкаталоги не надо. Просто число файлов в одном каталоге без подкаталогов.

Спасибо.
Boo
Пользователь
Сообщения: 92
Зарегистрирован: 20 фев 2003, 00:41

Сообщение Boo »

в ДОС промпте говоришь dir и она тебе в конце говорит сколько файлов и сколько каталогов.

или тебе код на ассемблере дать? :wink:
Аватара пользователя
Смайл
Пользователь
Сообщения: 135
Зарегистрирован: 18 фев 2003, 10:38

Re: сколько файлов в каталоге?

Сообщение Смайл »

папа Карло писал(а):Как посчитать число файлов в каталоге. Рекурсии в подкаталоги не надо. Просто число файлов в одном каталоге без подкаталогов.

Спасибо.
Если в ескплорере то могу дать рецепт: В среднем средний палец накрывает три файла. Потыкайся пальцами примерно посчитаешь.

T-SQL адепт, детерменируй!
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8563
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Re: сколько файлов в каталоге?

Сообщение папа Карло »

Смайл писал(а):Если в ескплорере то могу дать рецепт: В среднем средний палец накрывает три файла. Потыкайся пальцами примерно посчитаешь.

T-SQL адепт, детерменируй!
это Пете, это не мне. :)
Аватара пользователя
Lepsik
Житель
Сообщения: 522
Зарегистрирован: 17 фев 2003, 18:34
Откуда: Berlin
Контактная информация:

Сообщение Lepsik »

упс - поправка - кинул не чекнув

//---------------------------------------------------------------------------
set<String> listFiles(String name_folder )
{
TSearchRec sr;
String mask = name_folder + "\\*.*";
set<String> result;

if( FindFirst(mask, faAnyFile, sr) == 0)
do {
result.insert( sr.Name );
} while ( FindNext(sr) == 0 );

return result;
}
Boo
Пользователь
Сообщения: 92
Зарегистрирован: 20 фев 2003, 00:41

Сообщение Boo »

В коде есть HADNLE leak. И кроме того, возвращаемый результат должен быт типа int как можно понять из условий задачи, т.е. он должен говорить

Код: Выделить всё

// ...
    return result.size() ;
}
в конце :? . Еще, код посчитает директории вместе с файлами (включая "." и "..").

Такие вот грабли :oops:
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8563
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

нам не надо список. нам надо число. например...

"в каталоге C:\TestFolder находится 5 файлов"
Аватара пользователя
Смайл
Пользователь
Сообщения: 135
Зарегистрирован: 18 фев 2003, 10:38

Сообщение Смайл »

папа Карло писал(а):нам не надо список. нам надо число. например...

"в каталоге C:\TestFolder находится 5 файлов"

Код: Выделить всё

[JScript]
function ItemsInFolder(folderspec)
{
   var fso, folder;
   fso = new WScript.CreateObject("Scripting.FileSystemObject");
   folder = fso.GetFolder(folderspec);
   if(folder)
      return folder.Files.Count() + folder.Folders.Count();
   return(0);
}
WScript.Echo ("number of items is " + ItemsInFolder("C:\TestFolder"));

Boo
Пользователь
Сообщения: 92
Зарегистрирован: 20 фев 2003, 00:41

Сообщение Boo »

Код: Выделить всё

[Perl]
opendir(D, $d = 'C:\TestDir') || die "can't opendir $d: $!";
print scalar( grep { -f "$d/$_" } readdir(D) ), " file(s) found in $d\n" ;
closedir D;
.... такой вариант еще есть
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8563
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

а на С или плюсах? :)
Аватара пользователя
Смайл
Пользователь
Сообщения: 135
Зарегистрирован: 18 фев 2003, 10:38

Сообщение Смайл »

папа Карло писал(а):а на С или плюсах? :)
Лентяй!

WIN32:

Код: Выделить всё

#include <stdio.h>
#include <io.h>

int main( int argc, char* argv[] )
{
  _finddata_t fileinfo;
  long counter = 0;
  long h = _findfirst( argv[1], &fileinfo ); if(h == -1) return 1;
  while(_findnext( h, &fileinfo ) == 0) 
    counter++; 
  _findclose(h);
  printf("there are %d items like %s\n",counter,argv[1]);
  return 0;
}
Boo
Пользователь
Сообщения: 92
Зарегистрирован: 20 фев 2003, 00:41

Сообщение Boo »

на С говоришь? первый раз бесплатно :) :

Код: Выделить всё

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>


void add_slash( LPTSTR pszStr )
{
	size_t l ;
	l = _tcslen(pszStr) ;
	if( l > 0 && pszStr[l-1] == _T('\\') || pszStr[l-1] == _T('/') )
		return ;
	_tcscat( pszStr, _T("\\") ) ;
}

int count_files( LPCTSTR pszDir )
{
	TCHAR szPath[_MAX_PATH] ;
	WIN32_FIND_DATA FindFileData;
	HANDLE hFind;
	int nCount = 0 ;

	_tcscpy( szPath, pszDir ) ;
	add_slash( szPath ) ;
	_tcscat( szPath, _T("*.*") ) ;

	hFind = FindFirstFile( szPath, &FindFileData );

	if( hFind != INVALID_HANDLE_VALUE )
	{
		do
		{
			if( 0 == (FILE_ATTRIBUTE_DIRECTORY & FindFileData.dwFileAttributes ) )
				++nCount ;
		} while( FindNextFile( hFind, &FindFileData ) ) ;
		FindClose(hFind);
	}

	return nCount ;
}

void main(void)
{
	TCHAR szDir[] = _T("C:\\TestDir") ;
	printf( _T("%d file(s) found in %s\n"), count_files(szDir), szDir  ) ;
}
Boo
Пользователь
Сообщения: 92
Зарегистрирован: 20 фев 2003, 00:41

Сообщение Boo »

смайл, у меня твоя прога не работает :oops:
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8563
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

Смайл писал(а):Лентяй!
не я просто релиз готовлю да дела передаю ;)
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8563
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

а без перебора слабо? есть АПИшная функция? :)
Ответить