Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Rad sa fajlovima u direktorijumu

[es] :: C/C++ programiranje :: Rad sa fajlovima u direktorijumu

[ Pregleda: 1683 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

cdjole
Djordje Cvijetic
Novi Sad

Član broj: 151293
Poruke: 30
*.dynamic.sbb.rs.



Profil

icon Rad sa fajlovima u direktorijumu17.09.2008. u 16:30 - pre 190 meseci
Pozdrav.

Treba da napravim aplikaciju koja bi mi omogucila pretrazivanje nekog foldera i, shodno nekim kriterijumima, kopiranje, brisanje ili premestanje fajlova iz tog foldera (npr. prema imenu).
Nasao sam spisak Win32 funkcija, medjutim imam nejasnoca kako da ih iskombinujem i nekih pitanja oko deklaracije. Npr., konkretno za funkciju

HANDLE FindFirstFile(LPCTSTR lpFileName, LPWIN32_FIND_DATA lpFindFileData);

nije mi jasno sta oznacava ovaj drugi parametar pri pozivu, sta bi tu trebalo konkretno da unesem. Sta bi trebalo da includujem u program, pri radu sa ovim funkcijama tj. da li je dovoljno
samo <windows.h>?

Takodje me zanima vezano za funkciju

BOOL CopyFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL bFailIfExists);

da li pod "lpNewFileName" mogu da unesem novi naziv fajla sa celom putanjom, tako da mi ga kopira u neki drugi folder ili mora samo naziv (i da ga kopira u radnom folderu)?

Da li mogu uz pomoc neke funkcije da izabrani fajl posaljem direktno na stampac (ako je npr. tipa .pdf ili .doc)? Ovo bi mi bila vrlo korisna opcija, ukoliko nije suvise komplikovano, ali i principu
su mi one gornje opcije primarne.

Bilo kakva pomoc mi je dobrodosla, najbolje bi bilo ako bi neko napisao neki prost konkretan primer, npr. za funkciju FindFirstFile, kontam da bih tako najlakse razumeo ono sto mi nije jasno, a posle
bih ja dalje kombinovao. Da napomenem da radim u C++ Builderu.

 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
91.148.114.*



+7 Profil

icon Re: Rad sa fajlovima u direktorijumu17.09.2008. u 21:19 - pre 190 meseci
Ovako mozes da pretrazis sve bmp slike sa C diska.
Code:

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

int main()
{
    HANDLE hFile;
    WIN32_FIND_DATA FindFileData ;

    char* lpFileName = "C:\\*.bmp"; // trazimo sve bmp fajlove sa c
    char* lpCurFile = new char[MAX_PATH];// buffer za trenutni nadjeni fajl
    if((hFile = FindFirstFile(lpFileName,&FindFileData)) == INVALID_HANDLE_VALUE) // trazimo prvi bmp fajl
    {
        cout << "Nema fajlova" << endl ;
        return 0;
    }
    //ako ima kopiramo ime prvog nadjenog fajla iz WIN32_FIND_DATA strukture u buffer
    strcpy(lpCurFile,FindFileData.cFileName);
    //ispisujemo ga
    cout << lpCurFile << endl;

    //sad idemo ove ostale
    while(FindNextFile(hFile,&FindFileData))
    {
        strcpy(lpCurFile,FindFileData.cFileName);
        //ispisujemo ga
        cout << lpCurFile << endl;
    }

    system("PAUSE");
    return 0;
}


 
Odgovor na temu

cdjole
Djordje Cvijetic
Novi Sad

Član broj: 151293
Poruke: 30
*.dynamic.sbb.rs.



Profil

icon Re: Rad sa fajlovima u direktorijumu18.09.2008. u 00:03 - pre 190 meseci
Hvala. Deluje mi da ce biti koristan primer. :) Ujtru cu ga malo detaljnije prostudirati.
 
Odgovor na temu

cdjole
Djordje Cvijetic
Novi Sad

Član broj: 151293
Poruke: 30
*.dynamic.sbb.rs.



Profil

icon Re: Rad sa fajlovima u direktorijumu18.09.2008. u 15:32 - pre 190 meseci
Evo pregledo sam malo detaljnije kod, prilagodio ga aplikaciji i radi sto bi i trebalo. E sad, naisao sam na problem kad sam pokusao da nateram aplikaciju da pritiskom na dugme kopira
pronadjeni fajl u novoformirani direktorijum. Donji kod kad kompajliram i pokrenem program, on prodje, napravi se novi direktorijum, ali od kopiranja ni traga ni glasa. Pretpostavljam da
je problem u zadavanju parametara funkcije CopyFile. Unosio sam za staro ime fajla i lpCurFile i FindFileData.cFileName, a za novo ime i sam pokusao mnogo kombinacija, i da kopira u
novi direktorijum, al ne ide. Poslednji put sam probao da unesem samo ime, da ga bar kopira na isto mesto ili mozda u radni direktorijum, ali opet nista. Vidim da u Helpu stoji da treba
unositi parametre za tu funkciju preko referenci, ali ja ne znam sta konkretno da unesem, pa bih bio zahvalan za pomoc. Cilj mi je da pronadjeni fajl kopira u novoformirani direktorijum.

Code:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    HANDLE hFile;
    WIN32_FIND_DATA FindFileData ;

    char* lpFileName = "E:\\A\\*.bmp";
    char* lpCurFile = new char[MAX_PATH];

    CreateDirectory("E:\\A\\Pronadjeno", NULL);

    if((hFile = FindFirstFile(lpFileName,&FindFileData)) == INVALID_HANDLE_VALUE)
        Label1->Caption = "Nema fajlova";
    else
    {

          strcpy(lpCurFile,FindFileData.cFileName);
          Label1->Caption = lpCurFile;

          CopyFile(FindFileData.cFileName, "m.bmp", FALSE); //?????????????????????????????????
    
          while(FindNextFile(hFile,&FindFileData))
          {
              //ovde ide provera i kopiranje za ostale elemente
          }
    }
    FindClose(hFile);
    //system("PAUSE");
    //return 0;
}
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
91.148.114.*



+7 Profil

icon Re: Rad sa fajlovima u direktorijumu18.09.2008. u 16:26 - pre 190 meseci
Koliko znam CopyFile treba da dobije kao parametre cele putanje fajlova ... a ime nadjenog fajla u WIN32_FIND_DATA strukturi je samo ime i ekstenzija.
Znaci moras da napravis celu putanju ... drajv i folder (u kome se trazi i u koji se kopira) znas. Pogledaj kod dole ...
Inace ako trebas da nadjes samo jedan fajl mozes da pozoves FindFirstFile sa tacnom putanjom (bez * za trazenje) i ako ne vrati INVALID_HANDLE_VALUE znaci da fajl postoji ...
Code:

__fastcall TForm2::Button1Click(TObject *Sender)
{
    HANDLE hFile;
    WIN32_FIND_DATA FindFileData ;

    char* lpSearchDir = "C:\\"; // folder , drajv ... dodaj uvek \\ na kraj zbog nastavljanja
    char* lpTemplateFileName = "C:\\*.bmp";  // ovo je za trazenje
    char* lpNewDir = "C:\\Pronadjeno\\";   // stavi \\ na kraju zbog nastavljanja
    char* lpCurFileSource = new char[MAX_PATH]; // ovde cemo celu putanju nadjenog
    char* lpCurFileDestination = new char[MAX_PATH]; // ovde cemo celu putanju novog fajla


    if((hFile = FindFirstFile(lpTemplateFileName,&FindFileData)) == INVALID_HANDLE_VALUE)
    ;//    Label1->Caption = "Nema fajlova";
    else
    {
          CreateDirectory(lpNewDir, NULL);
          strcpy(lpCurFileSource,lpSearchDir); // prvo pravimo celu putanju zato sto je u FindFileData.cFileName samo fajl.bmp
          //sad je u lpCurFileSource "C:\\"
          strcat(lpCurFileSource,FindFileData.cFileName);// dodajemo ime i ekstenziju
          //sad imamo celu putanju u lpCurFileSource
          //pravimo putanju i za novi fajl ...
          strcpy(lpCurFileDestination,lpNewDir);
          strcat(lpCurFileDestination,FindFileData.cFileName);
      //    Label1->Caption = lpCurFile;

          CopyFile(lpCurFileSource, lpCurFileDestination, FALSE); //?????????????????????????????????

          while(FindNextFile(hFile,&FindFileData))
          {
              strcpy(lpCurFileSource,lpSearchDir);
              strcat(lpCurFileSource,FindFileData.cFileName);
              strcpy(lpCurFileDestination,lpNewDir);
              strcat(lpCurFileDestination,FindFileData.cFileName);
              CopyFile(lpCurFileSource, lpCurFileDestination, FALSE);
          }
    }
    FindClose(hFile);
    if(lpCurFileSource)
        delete[] lpCurFileSource;
    if(lpCurFileDestination)
        delete[] lpCurFileDestination;

}


[Ovu poruku je menjao Eurora3D Team dana 18.09.2008. u 17:44 GMT+1]
 
Odgovor na temu

cdjole
Djordje Cvijetic
Novi Sad

Član broj: 151293
Poruke: 30
*.dynamic.sbb.rs.



Profil

icon Re: Rad sa fajlovima u direktorijumu18.09.2008. u 18:15 - pre 190 meseci
Hvala mnogo druze na pomoci... :)
 
Odgovor na temu

[es] :: C/C++ programiranje :: Rad sa fajlovima u direktorijumu

[ Pregleda: 1683 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.