smegpot Skrevet 29. desember 2005 Skrevet 29. desember 2005 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...
A_N_K Skrevet 29. desember 2005 Skrevet 29. desember 2005 Det kan se ut som rename (stdio.h) er hva du er ute etter, et problem, dog, er at den ikke vil fungere fra ett montert filsystem til et annet.
smegpot Skrevet 29. desember 2005 Forfatter Skrevet 29. desember 2005 Hva med DeleteFile og CopyFile da? Finnes det noen tilsvarende for disse og, evt. en link til en site som har en oversikt over Linux's API Smeg out...
A_N_K Skrevet 29. desember 2005 Skrevet 29. desember 2005 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.
dayslepr Skrevet 29. desember 2005 Skrevet 29. desember 2005 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.
genstian Skrevet 29. desember 2005 Skrevet 29. desember 2005 du kan vel bruke: system("rm file"); system(cp file2 file); system(mv file2 file3);
Dead_Rabbit Skrevet 30. desember 2005 Skrevet 30. desember 2005 (endret) 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; } (Edit: haha!) Endret 30. desember 2005 av zirener
Axel`` Skrevet 1. januar 2006 Skrevet 1. januar 2006 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.
Axel`` Skrevet 1. januar 2006 Skrevet 1. januar 2006 ++ 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.
genstian Skrevet 1. januar 2006 Skrevet 1. januar 2006 #include <iostream> #include <cstdlib> using namespace std; int main() { system("rm file"); system("cp file2 file"); system("mv file2 file3"); return 0; } *nix
Manfred Skrevet 2. januar 2006 Skrevet 2. januar 2006 Noe av poenget her var vel å unngå bruk av system()? Det er dumt å bruke veldig plattformavhengig kode.
genstian Skrevet 2. januar 2006 Skrevet 2. januar 2006 det er jo en mulighet for og bruke eks: #ifdef WINDOWS void remove(string file) { //WinAPI kode, kan ikke WinAPI } void move(string file, string file2) ... #endif #ifdef UNIX //bruk system() .... #endif
Dead_Rabbit Skrevet 2. januar 2006 Skrevet 2. januar 2006 Koden er fortsatt uportabel, og når man kan gjøre det vha. funksjonene rename/remove i cstdlib, er det unødvendig å gjøre det mer uportabelt enn nødvendig. http://www.cppreference.com/stdio/remove.html http://www.cppreference.com/stdio/remove.html
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå