Wyszukiwanie plików na dysku

Odpowiedz Nowy wątek
2011-09-19 13:09
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.

edytowany 1x, ostatnio: madmike, 2011-09-19 19:07

Pozostało 580 znaków

2011-09-19 13:22
Rev
2011-09-19 13:26
0

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

Pozostało 580 znaków

2011-09-19 13:33
Rev
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

Pozostało 580 znaków

2011-09-19 13:51
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);
   }
}

Pozostało 580 znaków

2011-09-19 13:54
Rev
0

JAKIE BŁĘDY?!


Pozostało 580 znaków

2011-09-19 13:56
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

Pozostało 580 znaków

2011-09-19 13:56
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++.


"(...) otherwise, the behavior is undefined".
edytowany 2x, ostatnio: Endrju, 2011-09-19 13:58

Pozostało 580 znaków

2011-09-19 14:01
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.

Pozostało 580 znaków

2011-09-19 15:38
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.

edytowany 1x, ostatnio: kaczkazdw, 2011-09-19 15:40

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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