[C++]Kopiowanie pliku


(Kamilmlody5) #1

Witam. Problem jest z kopiowaniem pliku:

CopyFile (argv[1], argv[2], false);

Kompilator zwraca mi błąd:

'CopyFileW' : cannot convert parameter 1 from 'char *' to 'LPCWSTR'

Niby rozumiem błąd, lecz nie mam pomysłu jak go naprawić. Z góry thx za odpowiedź.


(Fiołek) #2

Użyj CopyFileA lub zmień w ustawieniach projektu Use Character Set(zakładka General) z Use Unicode... na Use Multi-byte... lub Not set.


(Kamilmlody5) #3

Ok. Dziarga xD. Dzięki fiołek ponownie :). Ale jest jeden problem. Czemu nie kopiuje xD skoro jest on od tego?. Wpisuje napewno dobrze lokalizacje, lecz czemu nie kopiuje?. I jeszcze jeden problem. Jak moge pobrać rozmiar pliku?


(Fiołek) #4

Sprawdź co zwraca GetLastError(czy tam dodaj @err, hr w oknie Watches debuggera), my tu nie mamy kryształowych kul :wink:

GetFileSize, GetFileSizeEx, stat(działa na Windowsie), czy nawet metoda rodem z *niksa:

  • [*:1t41nets]zapisz gdzie jesteś

(Kamilmlody5) #5

Jedynie co udało mi sie wyciągnąć z GetLastError to - 2. Poprostu cyfra 2.

Oto kod i działanie programu:

KOD:

if(argv[1] == s && argv[2] != 0 && argv[3] != 0)

	{

		//kod kopiowania

		std::string sru1 = argv[2];

		std::string sru2 = argv[3];

		std::cout << "Kopiowanie z: " << sru1 << " do: " << sru2 << std::endl;

		CopyFileA("sru1", "sru2", false);

		std::cout << GetLastError() << std::endl;

	getch();

	}

Działanie programu:

:oxy s "f:\plik1.txt" "f:\plik2.txt"

Kopiowanie z: f:\plik1.txt do: f:\plik2.txt

2


:

A więc błąd 2, czyli: The system cannot find the file specified. Czyli, że nie może znaleźć pliku do kopiowania? Przecież podejzałem zmienną sru1 i widać dobrze ścieżkę :frowning: jak i plik również istnieje.

Kiedyś jak bawiłem się z batch, wiedziałem, że gdy używam komendy copy jakas zmienna jakas zmienna, to nie chodziło. A więc tak samo jest w C++? Bo gdy sam w kodzie wpisze ścieżke do pliku to chodzi.


(Fiołek) #6

I o to chodzi :wink: Pamiętaj, Google to potężne narzędzie - szukaj! A jeśli masz już trochę wprawy to po linkach w MSDN dojdziesz do tego czego chcesz(a o programowaniu na Windows lepszego źródła wiedzy nie znajdziesz). Jako iż miałem do czynienia niedawno z kodami błędów(choć ja to sobie dodałem do watches w debuggerze i miałem od razu opis, no ale...) - System Error Codes (0-499), sprawdź co znaczy kod błędu '2' i go popraw.


(Kamilmlody5) #7

OFFTOP: Zedytowałem poprzedniego posta. Przepraszam, ale to dlatego, że ciągle kod zmieniam i szukam błędu.


(Fiołek) #8

Eeee... Ścieżka może i dobra jest, ale czy Ty wiesz jak się przekazuje zmienne do funkcji? :stuck_out_tongue:

CopyFileA( ___"sru1"___ , ___"sru2"___ , false);

Nie uważasz, że to nijak ma się do tego co chciałeś osiągnąć?


(Kamilmlody5) #9

Szczerze: nie mam o tym pojęcia. Poprostu robie programy, tak sie ucze i tyle mam do powiedzenia.

teraz tak: kompilator wypluwa mi:

error C2065: '___' : undeclared identifier

1>c:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\oxy\oxy\oxy.cpp(38) : error C2143: syntax error : missing ')' before 'string'

1>c:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\oxy\oxy\oxy.cpp(38) : error C2059: syntax error : ')'

kod:

if(argv[1] == s && argv[2] != 0 && argv[3] != 0)

	{

		//kod kopiowania

		std::string sru1 = argv[3];

		std::string sru2 = argv[4];

		std::cout << "Kopiowanie z: " << sru1 << " do: " << sru2 << std::endl;

		CopyFileA( ___"sru1"___ , ___"sru2"___ , false);

		std::cout << GetLastError() << std::endl;

	getch();

	}

(Fiołek) #10

Przeczytaj jakikolwiek kurs, bo brakuje Ci podstaw(a ja ich niestety tłumaczył nie będę :wink: ). "___" były po to by wyróżnić miejsce błędu, to nie był gotowy kod.


(Kamilmlody5) #11

Aha xD. OK. Teraz lece do wuja google :wink:. A to dlatego pomyliłem bo jest takie coś jak: __DATE__ lub __TIME__. Więc myślałem, że to i tu jest potrzebne :slight_smile: