Hur gör jag för att kopiera en fil?
Kopiera fil
11 svar · 380 visningar · startad av taper lawyer
Du skapar en ny fil med samma innehåll som den du vill kopiera.
Du öppnar alltså filen du vill kopiera från och filen du vill kopiera till. Sedan läser du från filen du ska kopiera från och skriver till filen du ska kopiera till. Slutligen stänger du filerna.
Kan man göra det med t ex en EXE-fil också?
Ja, det spelar ingen roll vad det är för filer. Men du ska alltid öppna filerna binärt.
Okej, tack!
Hur gör man för att kolla om en mapp existerar, då?
I vilket syfte? För att se om du kan kopiera dit? Det är bara att prova. Du får ett felmeddelande om det inte går.
Okej, och om man skall kolla om en fil existerar? Försöker man öppna filen då för att se om man lyckas?
Ja.
Hm, jag har stött på vissa problem. Jag har en kod som ser ut ungefär så här:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main(int argc, char **argv)
{
FILE *pFile;
long lSize;
char *buffer;
pFile = fopen(argv[0], "rb");
// Läs in från filen
fclose(pFile);
pFile = fopen("C:\\ett_annat_ställe\\".argv[0], "wb");
// Skriv en kopia
fclose(pFile);
free (buffer);
}
Men när jag skall kompilera så får jag fram:
13: error: request for member `argv' in `"C:\\ett_annat_ställe\\"', which is of non-class type `const char[66]'
26: error: request for member `argv' in `"C:\\ett_annat_ställe\\"', which is of non-class type `const char[66]'
Rad 13 är pFile = fopen(argv[0], "rb"); och rad 26 är pFile = fopen("C:\\ett_annat_ställe\\".argv[0], "wb");.
några saker som jag hittar på rak arm...
1. argv[0] är namnet på ditt program och inte första argumentet. således borde du ha argv[1] där.
2. raden: pFile = fopen("C:\\ett_annat_ställe\\".argv[0], "wb");
är mer PHP än C/C++... ett alternativ vore...
char nyfil[256];
sprintf( nyfil, "c:\\ett_annat_ställe\\%s", argv[1] );
pFile = fopen( nyfil, "wb");
3. en liten varning när du kör free( buffer ) när du inte allokerat minne för denna pekare.
Man bör alltid testa sina pekare och filhandtag för att slippa otrevliga överraskningar.
pFile = fopen(argv[0], "rb");
Kan lätt formas om till ett test:
if((pFile = fopen(argv[0], "rb"))==NULL)
exit(1);
Och deleten av buffer:
if(buffer)
free(buffer)
Typ ungefär :)
Tack för hjälpen allihopa! :)