[C++] kopiowanie

0

Witam!
Mam problem z pewną funcją a mianowicie, mam funkcje która odczytuje ścieżkę do pliku (aktualnie otworzonego)

LPSTR sciezka=GetCommandLine();<code>
To ładnie działa... ale chciałem zrobić, aby odczytało ścieżkę do pliku i skopiowało go, więc zrobiłem tak:
	LPSTR sciezka=GetCommandLine();
	CopyFile(sciezka,"C:\\\\nowy.exe", true);<code>

I nie wiem dlaczego nie chce mi go skopiować... Macie jakieś pomysły?
Byłbym wdzięczny za pomoc

Cały kod wygląda tak:

#include <iostream>
#include <windows.h>
#include <conio.h>

using namespace std;

int funkcja(int);

int main()
{
	int pyt;

	cout<<"Chcesz skopiowac plik?";
	cout<<"\\n1-Tak\\n2-Nie\\n>>";
	cin>>pyt;

	if (pyt==1)
	{
		LPSTR sciezka=GetCommandLine();
		CopyFile(sciezka,"C:\\\\nowy.exe", true);
	}
	else
	{
		if (pyt==2)
		{
			cout<<"\\n*Dzieki";
			return 0;
		}

		cout<<"\\nNie mozesz uzyc tego klawisza";

		getch();

		return 0;
	}

	getch();

	return 0;
}<code>
1

Nyooo zdziwil bym sie jak by dzialalo ;>
blad lezy tutaj:

LPSTR sciezka=GetCommandLine();
CopyFile(sciezka,"C:\\nowy.exe", true);

Zastanowmy sie jak dziala GetCommandLine()...
na przykladzie prostego programu:

#include<stdio.h>
#include<windows.h>

int
main( void )
{
  puts( GetCommandLine() );
  return 0;
}

program ten ofc wypisuje to co zwroci GetCommandLine na ekran... i tak, nastepujace uruchomienia daja nastepujace efekty:

>getcmd
getcmd

>getcmd test1 test2 test3
getcmd test1 test2 test3

>getcmd ala ma kota
getcmd ala ma kota

Ok.. a o co tobie chodzilo? pewnie o cos takiego:
kopiuj co
gdzie "kopiuj" tyo nazwa programu, a "co" to nazwa pliku do skopiowania..
chodzi wiec zeby wyluskac stamtad "co", czyli drugi argument...
jak to zrobic? dwa sposoby...

  1. dwa slowa.. ANSI C...
    mianowicie, zmien sobie to int main() na int main( int argc, char **argv ), a pozniej
    zrob CopyFile( argv[1], "C:\\nowy.costam", true );

  2. pomecz sie z parsigniem.. mozesz to zrobic na pare sposobow:
    a) po sciezka = GetCommandLine( ); daj while( *(sciezka++) != ' ' );, tyo powinno zalatwic choc na chwile sprawe (nie powiem zeby to bylo piekne rozwiazanie ;>)
    b) uzyj CommandLineToArgvW jesli koniecznie chcesz wide chary uzywac (wkoncu GetCommandLine glownie po to sie wykozystuje afair)...

0

Kolejne elementy z lini poleceń możesz też odczytywać za pomocą funkcji strtok...

0
  1. dwa slowa.. ANSI C...
    mianowicie, zmien sobie to int main() na int main( int argc, char **argv ), a pozniej
    zrob CopyFile( argv[1], "C:\\nowy.costam", true );

Zrobiłem tak... i nie działa... tzn doradzili mi abym zrobił tak:

int main(int argc, char *argv[])
{
    int pyt;

    if(argc!=1)
    {
       cout<<"Zla liczba parametrow na linii polecen !"<<endl;
       return 1;
    };

    cout<<"Chcesz skopiowac plik?";
    cout<<"\\n1-Tak\\n2-Nie\\n>>";
    cin>>pyt;

    if (pyt==1)
    {

        if(CopyFile(argv[1],argv[2], true))
        {
           cout<<"Skopiowano plik '"<<argv[1]<<"'"<<endl;
        }
        else
        {
           cout<<"Blad przy kopiowaniu '"<<argv[1]<<"'"<<endl;
        };
    };

    cout<<"Nacisnij dowolny klawisz"<<endl;
    getch();

    return 0;
} <code>

Odpala program, pokazuje się menu, wybiera,m 1(tak) i wyskakuje bład podczas kopiowania, błąd windy... i pokazuje "Blad przy kopiowaniu "" i nie pokazuje jakiego pliku...

<quote>
2) pomecz sie z parsigniem.. mozesz to zrobic na pare sposobow:
a) po sciezka = GetCommandLine( ); daj while( *(sciezka++) != ' ' );, tyo powinno zalatwic choc na chwile sprawe (nie powiem zeby to bylo piekne rozwiazanie ;>)
</quote>

Zrobiłem i tak:

int main()
{
int pyt;

cout<<"Chcesz skopiowac plik?";
cout<<"\\n1-Tak\\n2-Nie\\n>>";
cin>>pyt;

if (pyt==1)
{
    LPSTR sciezka=GetCommandLine();
while( *(sciezka++) != ' ' );
    CopyFile(sciezka,"C:\\\\nowy.exe", true);
}
else
{
    if (pyt==2)
    {
        cout<<"\\n*Dzieki";
        return 0;
    }

    cout<<"\\nNie mozesz uzyc tego klawisza";

    getch();

    return 0;
}

getch();

return 0;

}


...i ni kopiuje



> b) uzyj CommandLineToArgvW jesli koniecznie chcesz wide chary uzywac (wkoncu GetCommandLine glownie po to sie wykozystuje afair)...


,,mógłbyś mi wytłumaczyć sik się tego uzywa?  [niewinnosc] 

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