Kopiowanie system("copy "zrodlo cel");

0
#include <iostream>
#include <windows.h>
#include <string>
class SCIEZKI
{
    public:
        SCIEZKI():dl(255)
        {
            Bufor = ( LPSTR ) GlobalAlloc( GPTR, dl );
        }
        void PobierzSwojaSciezke(){GetCurrentDirectory( dl, Bufor );}
        LPSTR ZwrocSciezke(){return Bufor;}
        ~SCIEZKI(){GlobalFree( Bufor );}
    private:
        const WORD dl;
        LPSTR Bufor;

};
class DYSKI
{
    public:
        DYSKI():flaga_konca(true){UNIA.m_aktywneDyski = 0;moje.PobierzSwojaSciezke();}
        ~DYSKI(){}
        void pobierzDyski(){UNIA.m_aktywneDyski = GetLogicalDrives();}
        void ZnajdzAktywneDyski();
        SCIEZKI moje;
        bool FlagaKonca(){return flaga_konca;}
    private:
        bool flaga_konca;
        void WyszukajDoKopiowania(LPCTSTR);
        union zbior
        {
            DWORD m_aktywneDyski;
            struct bity
            {
                    unsigned a : 1;
                    unsigned b : 1;
                    unsigned c : 1;
                    unsigned d : 1;
                    unsigned e : 1;
                    unsigned f : 1;
                    unsigned g : 1;
                    unsigned h : 1;//8
                    unsigned i : 1;
                    unsigned j : 1;
                    unsigned k : 1;
                    unsigned l : 1;
                    unsigned m : 1;
                    unsigned n : 1;
                    unsigned o : 1;
                    unsigned p : 1;//16
                    unsigned r : 1;
                    unsigned s : 1;
                    unsigned t : 1;
                    unsigned u : 1;
                    unsigned w : 1;
                    unsigned x : 1;
                    unsigned y : 1;
                    unsigned z : 1;//24
            }struktura;//koniec struktury
        }UNIA;//koniec unii
};//koniec klasy
void DYSKI::ZnajdzAktywneDyski()
{
    if(UNIA.struktura.a){WyszukajDoKopiowania((LPCTSTR)"A:");}
    if(UNIA.struktura.b){WyszukajDoKopiowania((LPCTSTR)"B:");}
    if(UNIA.struktura.c){WyszukajDoKopiowania((LPCTSTR)"C:");}
    if(UNIA.struktura.d){WyszukajDoKopiowania((LPCTSTR)"D:");}
    if(UNIA.struktura.e){WyszukajDoKopiowania((LPCTSTR)"E:");}
    if(UNIA.struktura.f){WyszukajDoKopiowania((LPCTSTR)"F:");}
    if(UNIA.struktura.g){WyszukajDoKopiowania((LPCTSTR)"G:");}
    if(UNIA.struktura.h){WyszukajDoKopiowania((LPCTSTR)"H:");}//8
    if(UNIA.struktura.i){WyszukajDoKopiowania((LPCTSTR)"I:");}
    if(UNIA.struktura.j){WyszukajDoKopiowania((LPCTSTR)"J:");}
    if(UNIA.struktura.k){WyszukajDoKopiowania((LPCTSTR)"K:");}
    if(UNIA.struktura.l){WyszukajDoKopiowania((LPCTSTR)"L:");}
    if(UNIA.struktura.m){WyszukajDoKopiowania((LPCTSTR)"M:");}
    if(UNIA.struktura.n){WyszukajDoKopiowania((LPCTSTR)"N:");}
    if(UNIA.struktura.o){WyszukajDoKopiowania((LPCTSTR)"O:");}
    if(UNIA.struktura.p){WyszukajDoKopiowania((LPCTSTR)"P:");}//16
    if(UNIA.struktura.r){WyszukajDoKopiowania((LPCTSTR)"R:");}
    if(UNIA.struktura.s){WyszukajDoKopiowania((LPCTSTR)"S:");}
    if(UNIA.struktura.t){WyszukajDoKopiowania((LPCTSTR)"T:");}
    if(UNIA.struktura.u){WyszukajDoKopiowania((LPCTSTR)"U:");}
    if(UNIA.struktura.w){WyszukajDoKopiowania((LPCTSTR)"W:");}
    if(UNIA.struktura.x){WyszukajDoKopiowania((LPCTSTR)"X:");}
    if(UNIA.struktura.y){WyszukajDoKopiowania((LPCTSTR)"Y:");}
    if(UNIA.struktura.z){WyszukajDoKopiowania((LPCTSTR)"Z:");}//24
}
void DYSKI::WyszukajDoKopiowania(LPCTSTR szuk)
{
    std::string kopiowanie_sciezka;
    kopiowanie_sciezka = "copy \"" + (std::string)szuk + " " + (std::string)moje.ZwrocSciezke() + "\"";
    UINT temp = GetDriveType(szuk);
    switch(temp)
    {
   // case DRIVE_UNKNOWN:std::cout<<"DRIVE UNKNOWN"<<"\n";break;
   // case DRIVE_NO_ROOT_DIR:std::cout<<"DRIVE_NO_ROOT_DIR"<<"\n";break;
    case DRIVE_REMOVABLE:system(kopiowanie_sciezka.c_str());flaga_konca = false;break;
  //  case DRIVE_FIXED:std::cout<<"DRIVE_FIXED"<<"\n";break;
  //  case DRIVE_REMOTE:std::cout<<"DRIVE_REMOTE"<<"\n";break;
  //  case DRIVE_CDROM:std::cout<<"DRIVE_CDROM"<<"\n";break;
  //  case DRIVE_RAMDISK:std::cout<<"DRIVE_RAMDISK"<<"\n";break;
  //  default: std::cout<<"UNKNOWN VALUE"<<"\n";break;
    }
}
int main()
{
     
        DYSKI moje;
        while(moje.FlagaKonca())
        {
            moje.pobierzDyski();
            moje.ZnajdzAktywneDyski();
            Sleep(1000);
        }
        return 0;
}

 

Zadaniem prgoramu jest kopiowanie zawartosci nosnika typu pendrive. problem polega na tym, ze podczas kopiowania otrzymuje informacje ze:
"
Nazwa pliku, nazwa katalogu lub skladnia etykiety woluminu jest niepoprawna.
0file(s) copied.
Jak chce z cmd wywolac copy t wszystko dziala na dysku C
ps Zdaje sobie sprawe, że program jest do niczego, nie przenosny itp, ale niezaleznie od tego nie rozumiem czemu to nie dziala ? i co oznacza ten blad?
"

1

Kopiujesz folder o pustej nazwie i tyle.
Czy słyszałeś o operacjach bitowych?
Gdzie dyski Q i V ?

1
                    unsigned a : 1;
                    unsigned b : 1;
                    unsigned c : 1;
                    unsigned d : 1;
                    unsigned e : 1;
                    unsigned f : 1;
                    unsigned g : 1;
                    unsigned h : 1;//8
                    unsigned i : 1;
                    unsigned j : 1;
                    unsigned k : 1;
                    unsigned l : 1;
                    unsigned m : 1;
                    unsigned n : 1;
                    unsigned o : 1;
                    unsigned p : 1;//16
                    unsigned r : 1;
                    unsigned s : 1;
                    unsigned t : 1;
                    unsigned u : 1;
                    unsigned w : 1;
                    unsigned x : 1;
                    unsigned y : 1;
                    unsigned z : 1;//24

Tak na początek proponuję powtórzyć sobie angielski/łaciński alfabet.

0

Ale gdy wpisuje w konsoli copy "E:\blabla.txt C:\kopiowanie" lub copy "E:\blabla.txt C:\kopiowanie\asd.txt" mam ten sam blad ale gdy kopiwuje np: copy "C:\blabla.txt C:\asd\blabla.txt" to alles jest ok. z czego to wynika?

0

Co jest nie tak z operacjami bitowymi ?

0

Problem rozwizany, sry za kłopot. Teraz tylko co robie nie tak z operacjami bitowymi ?

0
OlafMan napisał(a):

Teraz tylko co robie nie tak z operacjami bitowymi ?
Z operacjami bitowymi jest wszystko ok, tylko że ty ich nie znasz.
Zamiast:

        union zbior
        {
            DWORD m_aktywneDyski;
            struct bity
            {...

wystarczy samo:

DWORD m_aktywneDyski;

Przykład:

for(unsigned i=0;i<26;++i) cout<<"dysk "<< (char)('A'+i)<<": "<<((m_aktywneDyski&(1<<i))?"zaznaczony":"nie zaznaczony")<<endl;
0

Dzieki, ucze się ;)

0

Faktycznie, ale poza tym, że można tak i tak to Twoje rozwiązanie chyba nie jest szybsze ani znacznie lepsze?

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