Wyszukiwanie plików na dysku

0

Witajcie.

Chciałbym abyście pomogli mi napisać mały programik, który wyszuka plik jaki podam przy pierwszym zapytaniu łącznie z rozszerzeniem. Zakres szukania to oczywiście cały dysk twardy. Chciałbym też aby ścieżka tego pliku została wyświetlona ewentualnie zapisana do zmiennej.

Taki programik miałby działać na Windowsie.
Używam Code Blocks

Jak zabrać się za coś takiego?

Z góry dzięki.

0

FindFirstFile? ok.
Macie jakiś przykład jak tego użyć?
Example który jest na stronie MSDN ma problem z kompilacją.

0

Jak masz problem z kompilacją prostego programu to może weź się najpierw za coś prostszego.

C:\Users\Rev\Documents\winsearch>dir
 Wolumin w stacji C nie ma etykiety.
 Numer seryjny woluminu: C8B2-3225

 Katalog: C:\Users\Rev\Documents\winsearch

2011-09-19  13:32    <DIR>          .
2011-09-19  13:32    <DIR>          ..
2011-09-19  13:29             3 071 program.cpp
               1 plik(ów)              3 071 bajtów
               2 katalog(ów)  17 123 725 312 bajtów wolnych

C:\Users\Rev\Documents\winsearch>cl program.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

program.cpp
Microsoft (R) Incremental Linker Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:program.exe
program.obj

C:\Users\Rev\Documents\winsearch>program .

Target directory is .

  .   <DIR>
  ..   <DIR>
  program.cpp   3071 bytes
  program.exe   47104 bytes
  program.obj   4342 bytes
0

Tu nie chodzi o to, że nie potrafię kompilować. Tylko o niezrozumiałe dla mnie błędy które występują podczas kompilacji poniższego kawałka kodu:

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

void _tmain(int argc, TCHAR *argv[])
{
   WIN32_FIND_DATA FindFileData;
   HANDLE hFind;

   if( argc != 2 )
   {
      _tprintf(TEXT("Usage: %s [target_file]\n"), argv[0]);
      return;
   }

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

JAKIE BŁĘDY?!

0

Izzy... Oto log...

Compiling: D:\WebServ\httpd\n0v3mb3r\files\search.cpp
D:\WebServ\httpd\n0v3mb3r\files\search.cpp:5: error: '::main' must return 'int'
D:\WebServ\httpd\n0v3mb3r\files\search.cpp: In function 'int main(int, TCHAR**)':
D:\WebServ\httpd\n0v3mb3r\files\search.cpp:13: error: return-statement with no value, in function returning 'int'
D:\WebServ\httpd\n0v3mb3r\files\search.cpp:21: error: return-statement with no value, in function returning 'int'
Process terminated with status 1 (0 minutes, 1 seconds)
3 errors, 0 warnings
0

main musi zwracać int. Zmień void na int i dodaj sobie jakieś cyferki do returnów. :-/

Z błędów wynika, że on sam sobie zmienia na int a potem ma returny bez intów. Kod był w C a Ty go kompilujesz kompilatorem C++.

0

Endrju... faktycznie.. Jeszcze coś takiego mi się nie zdarzyło.

Zmieniłem z *.cpp na *.c i teraz kompilacja przebiegła pomyślnie.

Niedopatrzenie. Dzięki.

0
#include <iostream>
#include <stdlib.h>
#include <windows.h>
using namespace std;

void Szukaj(char *curdir)
{
  WIN32_FIND_DATA wfd;
  BOOL IsFile = TRUE;
  HANDLE hFile;
  char path[200];
  SetCurrentDirectory(curdir);
  hFile = FindFirstFile("*.*", &wfd);
  while (IsFile)
  {
    char *sstr;
    GetFullPathName(wfd.cFileName, 199, path, NULL);
    if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && (wfd.cFileName[0] != '.'))
        Szukaj(path);
    if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&((sstr = strstr(path, "SzukanyPlik"))))
        cout << path << endl;
    IsFile = FindNextFile(hFile, &wfd);
  }
    if (curdir[0] > 3)
        SetCurrentDirectory("..");
}


int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int nCmdShow)
{
 Szukaj("C:\\");
 system("PAUSE");
 return 0;
}

Gdzie tutaj jest błąd? Program się zawiesza.

1 użytkowników online, w tym zalogowanych: 0, gości: 1