Gå til innhold

Flytte filer, Linux


Anbefalte innlegg

Heisann

I Win32 APIet finnes det en funksjon som heter MoveFile(...) som flytter en fil.

Finnes det tilsvarende under Linux og i så fall hva heter den?

Har lagd min egen variant som leser og skriver binært, men tenkte kanskje det fantes noe mere standardisert og som yter bedre.

 

Smeg out...

Lenke til kommentar
Videoannonse
Annonse

Faktisk er jeg ikke sikker på om det finnes noen standard funksjon på Linux for å kopiere en fil, derimot kan du bruke remove (stdio.h) for å slette en fil. Metoden jeg nå har brukt for å finne kall relatert til filbehandling er å slå opp vha. 'man'-kommandoen. Dvs. 'man remove' etc. og se hvilke andre kall som refereres til.

Lenke til kommentar

jeg ville brukt rename, sjekket hva den returnerte (-1?) og om errno da blir satt til EXDEV (sjekk man-siden) .. hvis dette er tilfelle er filene på forskjellige fil-systemer og du må kopiere den over selv v.h.a. standard C/C++-funksjoner (og bruke remove på kilde-filen etterpå, som A_N_K nevner)

 

ang. det å finne dokumentasjon er `apropos' og `info libc' også greie

 

hvis du er ute etter noe som er laget ferdig for deg, finnes det garantert en hel haug å velge i mellom - sjekk vanlige steder som f.eks. sf.net, http://directory.fsf.org/ o.l.

Lenke til kommentar
du kan vel bruke:

system("rm file");

system(cp file2 file);

system(mv file2 file3);

5355461[/snapback]

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
       system("rm file");
       system(cp file2 file);
       system(mv file2 file3);
       return 0;
}

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
       system("rm file");
       system(cp file2 file);
       system(mv file2 file3);
       return 0;
}

:dontgetit:

 

(Edit: haha!)

Endret av zirener
Lenke til kommentar

POSIX krever at rename()-funksjonen også skal fungere på mapper og symbolske lenker, ISO C gjør ikke det. Det er derfor viktig at det C-biblioteket du benytter følger POSIX, hvis programmet ditt også skal kunne flytte mapper.

 

--Axel.

Lenke til kommentar

++

 

et problem, dog, er at den ikke vil fungere fra ett montert filsystem til et annet.

5351920[/snapback]

Grunnen til dette er at rename() ikke fysisk flytter data på disken. Den oppretter kun en ny hard lenke til i-noden i den mappen du flytter filen til, samt å fjerne den gamle lenken.

 

Faktisk er jeg ikke sikker på om det finnes noen standard funksjon på Linux for å kopiere en fil, derimot kan du bruke remove (stdio.h) for å slette en fil
Alternativt kan du benytte unlink() eller rmdir(). remove() fungerer på både filer og mapper, mens unlink() er beregnet på filer og rmdir() på mapper.

 

--Axel.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...