webForumDet fria alternativet

Kopiera fil

C/C++

11 svar · 380 visningar · startad av taper lawyer

Medlem sedan jan. 2004155 inlägg
Frågan#1

Hur gör jag för att kopiera en fil?

Medlem sedan juni 20034 013 inlägg
#2

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.

Medlem sedan jan. 2004155 inlägg
#3

Kan man göra det med t ex en EXE-fil också?

Medlem sedan juni 20034 013 inlägg
#4

Ja, det spelar ingen roll vad det är för filer. Men du ska alltid öppna filerna binärt.

Medlem sedan jan. 2004155 inlägg
#5

Okej, tack!
Hur gör man för att kolla om en mapp existerar, då?

Medlem sedan juni 20034 013 inlägg
#6

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.

Medlem sedan jan. 2004155 inlägg
#7

Okej, och om man skall kolla om en fil existerar? Försöker man öppna filen då för att se om man lyckas?

Medlem sedan juni 20034 013 inlägg
#8

Ja.

Medlem sedan jan. 2004155 inlägg
#9

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");.

Medlem sedan juli 2004181 inlägg
#10

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.

Medlem sedan juni 200010 432 inlägg
#11

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 :)

Medlem sedan jan. 2004155 inlägg
#12

Tack för hjälpen allihopa! :)

275 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
134 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)