#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?
"