сколько файлов в каталоге?
					Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
	Пожалуйста, ознакомьтесь с правилами данного форума
- папа Карло
 - Шарманщик
 - Сообщения: 8565
 - Зарегистрирован: 17 фев 2003, 15:04
 - Откуда: НН -> BC -> WA -> UT -> CA
 
сколько файлов в каталоге?
Как посчитать число файлов в каталоге. Рекурсии в подкаталоги не надо. Просто число файлов в одном каталоге без подкаталогов.
Спасибо.
			
			
									
						
										
						Спасибо.
- 
				Boo
 - Пользователь
 - Сообщения: 92
 - Зарегистрирован: 20 фев 2003, 00:41
 
- Смайл
 - Пользователь
 - Сообщения: 135
 - Зарегистрирован: 18 фев 2003, 10:38
 
Re: сколько файлов в каталоге?
Если в ескплорере то могу дать рецепт: В среднем средний палец накрывает три файла. Потыкайся пальцами примерно посчитаешь.папа Карло писал(а):Как посчитать число файлов в каталоге. Рекурсии в подкаталоги не надо. Просто число файлов в одном каталоге без подкаталогов.
Спасибо.
T-SQL адепт, детерменируй!
- папа Карло
 - Шарманщик
 - Сообщения: 8565
 - Зарегистрирован: 17 фев 2003, 15:04
 - Откуда: НН -> BC -> WA -> UT -> CA
 
Re: сколько файлов в каталоге?
это Пете, это не мне.Смайл писал(а):Если в ескплорере то могу дать рецепт: В среднем средний палец накрывает три файла. Потыкайся пальцами примерно посчитаешь.
T-SQL адепт, детерменируй!
- Lepsik
 - Житель
 - Сообщения: 522
 - Зарегистрирован: 17 фев 2003, 18:34
 - Откуда: Berlin
 - Контактная информация:
 
упс - поправка - кинул не чекнув
//---------------------------------------------------------------------------
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;
}
			
			
									
						
										
						//---------------------------------------------------------------------------
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
 
В коде есть HADNLE leak. И кроме того, возвращаемый результат должен быт типа int как можно понять из условий задачи, т.е. он должен говорить
в конце  
 . Еще, код посчитает директории вместе с файлами (включая "." и "..").
Такие вот грабли
			
			
									
						
										
						Код: Выделить всё
// ...
    return result.size() ;
}
Такие вот грабли
- папа Карло
 - Шарманщик
 - Сообщения: 8565
 - Зарегистрирован: 17 фев 2003, 15:04
 - Откуда: НН -> BC -> WA -> UT -> CA
 
- Смайл
 - Пользователь
 - Сообщения: 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
 
Код: Выделить всё
[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;
- папа Карло
 - Шарманщик
 - Сообщения: 8565
 - Зарегистрирован: 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
 
на С говоришь? первый раз бесплатно  
 :
			
			
									
						
										
						Код: Выделить всё
#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
 
- папа Карло
 - Шарманщик
 - Сообщения: 8565
 - Зарегистрирован: 17 фев 2003, 15:04
 - Откуда: НН -> BC -> WA -> UT -> CA
 
- папа Карло
 - Шарманщик
 - Сообщения: 8565
 - Зарегистрирован: 17 фев 2003, 15:04
 - Откуда: НН -> BC -> WA -> UT -> CA