Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Поиск фалов


Автор: Cricket2007 30.7.2008, 18:48
Всем  доброго времени суток ! Хочу сделать программу поиска файлов на HDD (по имени файла), но  никак не могу даж представить себе как это сделать ( тоесть я хочу сделать без всяких готовых функций  чтоб понять принцип как это все работает ) вот как сделать поиск элемента в массиве я понял а вот на жестком как? подскажите хоть с чего начать плиз  smile  или напишите примерчих хотяб самый простой 

Автор: Partizan 30.7.2008, 19:06
Cricket2007, google findfirst findnext findfirstfile findnextfile

Автор: xvr 31.7.2008, 11:18
Цитата(Cricket2007 @ 30.7.2008,  18:48)
Всем  доброго времени суток ! Хочу сделать программу поиска файлов на HDD (по имени файла), но  никак не могу даж представить себе как это сделать ( тоесть я хочу сделать без всяких готовых функций  чтоб понять принцип как это все работает ) 

Эээ Совсем без 'готовых' функций?
Цитата

вот как сделать поиск элемента в массиве я понял а вот на жестком как? подскажите хоть с чего начать плиз  
С изучения интерфейса ATA (IDE), формата файловой системы (FAT32 или NTFS - на выбор).
Если же некоторые 'готовые' функции допускаются, то с чтения MSDN на тему FindFirstFile, FindNextFile и FindClose. Или же opendir, readdir, closedir. Или же findfirst, findnext
Цитата

 или напишите примерчих хотяб самый простой

Код

/* findfirst and findnext example */

#include <stdio.h>
#include <dir.h>

int main(void)
{
   struct ffblk ffblk;
   int done;
   printf("Directory listing of *.*\n");
   done = findfirst("*.*",&ffblk,0);
   while (!done) 
   {
      printf("  %s\n", ffblk.ff_name);
      done = findnext(&ffblk);
   }

   return 0;
}

Код

 /* opendir.c - test opendir(), readdir(), closedir() */
 
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
 
void scandir(char *dirname)
{
   DIR *dir;
   struct dirent *ent;
 
   printf("First pass on '%s':\n",dirname);
   if ((dir = opendir(dirname)) == NULL)
   {
     perror("Unable to open directory");
     exit(1);
   }
   while ((ent = readdir(dir)) != NULL)
     printf("%s\n",ent->d_name);
 
   printf("Second pass on '%s':\n",dirname);

   rewinddir(dir);
   while ((ent = readdir(dir)) != NULL)
     printf("%s\n",ent->d_name);
   if (closedir(dir) != 0)
     perror("Unable to close directory");
}
 
void main(int argc,char *argv[])
{
   if (argc != 2)
   {
     printf("usage: opendir dirname\n");
     exit(1);
   }
   scandir(argv[1]);
   exit(0);
}

Код

#define _WIN32_WINNT 0x0400

#include <windows.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
  WIN32_FIND_DATA FindFileData;
  HANDLE hFind;

  printf ("Target file is %s.\n", argv[1]);
  hFind = FindFirstFile(argv[1], &FindFileData);
  if (hFind == INVALID_HANDLE_VALUE) 
  {
    printf ("Invalid File Handle. GetLastError reports %d\n", GetLastError ());
    return (0);
  } 
  else 
  {
    printf ("The first file found is %s\n", FindFileData.cFileName);
    FindClose(hFind);
    return (1);
  }
}

Автор: rrrFer 5.8.2008, 19:38
я бы использовал функции командной строки окон. Сначала cd - переместился в нужную папку(где ищем), затем dir, а от dir перенаправил бы вывод в файл. а затем бы юзал find или findstr...
Нерационально, неоптимально, вообще тупо, нету переносимости и т.п., но зато просто ИМХО

Автор: MenSem 5.8.2008, 22:36
del

Автор: Grapapulas 26.11.2009, 22:58
Цитата(xvr @ 31.7.2008,  11:18)
#include <stdio.h>
#include <dir.h>

int main(void)
{
   struct ffblk ffblk;
   int done;
   printf("Directory listing of *.*\n");
   done = findfirst("*.*",&ffblk,0);
   while (!done) 
   {
      printf("  %s\n", ffblk.ff_name);
      done = findnext(&ffblk);
   }

   return 0;
}

Ваш пример то, что нужно! Только можете сделать, чтобы в консоли происходило примерно вот это ( по учебе очень нужно ):

1. Выбор место поиска
2.1. Выбор типа файлов для поиска
2.2. Возможность указывать размер файла для поиска 
3.1. Отобразить содержимое конкретного файла
3.2. Вывести Список найденных файлов на экран

Автор: bsa 27.11.2009, 00:18
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)