04. februar 2006 - 13:59Der er
30 kommentarer og 1 løsning
Oprettelse, sletning, læsning og redigering af filer
Hej eksperter!
Er dete korrekt, at der primært er to måder at oprette, slette, læse og redigere filer på med C++? Eks.: fopen og open - men nu vil jeg gerne have at vide, hvad forskellene er - og hvilke jeg bør bruge.
Hvordan åbner jeg en fil, hvilken metode skal jeg helst bruge? Hvordan skriver jeg til en fil, -||-? Læse fra en fil? Slette en fil? Flytte/omdøbe en fil?
Det var et par små spørgsmål til de kloge hoveder...
I C: fopen er standard funktionen til at åbne filer. open er pre standard, men bruges stadig lidt men mest på linux/unix platforme. Der er ikke ret meget grund til at bruge den. Til at læse og skrive er der fgets, fwrite, fread, fprintf, fscanf, fgetc og et par mere
I C++: ifstream og ofstream er class'erne, deres constructor og open kan åbne filerne. >> og << til at læse og skrive text, read og write til at læse og skrive binært.
Slette en fil: remove Omdøbe: rename
Synes godt om
Slettet bruger
04. februar 2006 - 15:01#3
Eksempler:
fopen("C:\\Documents and Settings\\Administrator\\Desktop\\file.extension"); - Åbner file.extension
rename("C:\\Documents and Settings\\Administrator\\Desktop\\file.extension", "C:\\Documents and Settings\\Administrator\\Desktop\\file2.extension"); - Omdøber file.extension til file2.extension
remove("C:\\Documents and Settings\\Administrator\\Desktop\\file.extension"); - Sletter C:\\Documents and Settings\\Administrator\\Desktop\\file.extension
Er disse eksempler rigtige? Hvordan oprettes en fil?
Synes godt om
Slettet bruger
04. februar 2006 - 15:04#4
Hvis jeg nu vil oprette en fil: C:\\Documents and Settings\\Administrator\\Desktop\\file.extension - og så skrive "Hej - \nhej igen!" i den - hvordan gøres dette?
Hvis jeg så vil have filen indlæst af en app, skal jeg så sige fopen("sti", "aabningAfFil"); fread("aabningAfFil", variabel); fclose("aabningAfFil); ???
og fgets for at laese en hel linie eller fscanf for formateret laesning
Synes godt om
Slettet bruger
04. februar 2006 - 17:03#7
#include <iostream.h> #include <stdlib.h>
int main() { FILE *fp; fp = fopen("C:\\Documents and Settings\\Administrator\\Desktop\\output.txt","w"); fprintf(fp,"linie 1\nlinie2\n"); fclose(fp); }
Retunerer
c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp: In function `int main()': c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp:6: `FILE' undeclared (first use this function) c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp:6: (Each undeclared identifier is reported only once c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp:6: for each function it appears in.) c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp:6: `fp' undeclared (first use this function) c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp:7: implicit declaration of function `int fopen(...)' c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp:8: implicit declaration of function `int fprintf(...)' c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp:9: implicit declaration of function `int fclose(...)'
cout << "Oprettelse af og skrivning til fil\n\nIndtast sti: "; getline(cin, sti); cout << "Indtast titel - kun en linie: "; getline(cin, titel); cout << "Intast tekst - kun en linie: "; getline(cin, tekst); cout << "\nGenererer indhold..."; indhold = "- " + titel + " -\n\n" + tekst; cout << " \'" << indhold << "\'\nOpretter/aabner fil..."; ofstream f(sti); //FILE *fp; //fp = fopen(sti.c_str(), "w"); cout << "\nSkriver til fil..."; f << indhold; //fprintf(fp, indhold.c_str()); cout << "\nLukker fil..."; f.close(); //fclose(fp); cout << "\nSucces!\n\nTryk <ENTER> for at lukke dette vindue."; getchar(); }
Retunerer:
c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp: In function `int main()': c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp:33: no matching function for call to `ofstream::ofstream (string &)' D:\DEV-C_~1\Include\G__~1\fstream.h:72: candidates are: ofstream::ofstream() D:\DEV-C_~1\Include\G__~1\fstream.h:73: ofstream::ofstream(int) D:\DEV-C_~1\Include\G__~1\fstream.h:74: ofstream::ofstream(int, char *, int) D:\DEV-C_~1\Include\G__~1\fstream.h:76: ofstream::ofstream(const char *, int = ios::out, int = 436) D:\DEV-C_~1\Include\G__~1\fstream.h:79: ofstream::ofstream(const ofstream &)
cout << "Oprettelse af og skrivning til fil\n\nIndtast sti: "; getline(cin, sti); cout << "Indtast titel - kun en linie: "; getline(cin, titel); cout << "Intast tekst - kun en linie: "; getline(cin, tekst); cout << "\nGenererer indhold..."; indhold = "- " + titel + " -\n\n" + tekst; cout << " \'" << indhold << "\'\nOpretter/aabner fil..."; ofstream f(c_str(sti)); //FILE *fp; //fp = fopen(sti.c_str(), "w"); cout << "\nSkriver til fil..."; f << indhold; //fprintf(fp, indhold.c_str()); cout << "\nLukker fil..."; f.close(); //fclose(fp); cout << "\nSucces!\n\nTryk <ENTER> for at lukke dette vindue."; getchar(); }
Retunerer:
c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp: In function `int main()': c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp:33: implicit declaration of function `int c_str(...)' c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp:33: warning: cannot pass objects of type `string' through `...'
cout << "Oprettelse af og skrivning til fil\n\nIndtast sti: "; getline(cin, sti); cout << "Indtast titel - kun en linie: "; getline(cin, titel); cout << "Intast tekst - kun en linie: "; getline(cin, tekst); cout << "\nGenererer indhold..."; indhold = "- " + titel + " -\n\n" + tekst; cout << " \'" << indhold << "\'\nOpretter/aabner fil..."; ofstream f(c_str()); //FILE *fp; //fp = fopen(sti.c_str(), "w"); cout << "\nSkriver til fil..."; f << indhold; //fprintf(fp, indhold.c_str()); cout << "\nLukker fil..."; f.close(); //fclose(fp); cout << "\nSucces!\n\nTryk <ENTER> for at lukke dette vindue."; getchar(); }
Retunerer:
c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp: In function `int main()': c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp:33: implicit declaration of function `int c_str(...)'
cout << "Oprettelse af og skrivning til fil\n\nIndtast sti: "; getline(cin, sti); cout << "Indtast titel - kun en linie: "; getline(cin, titel); cout << "Intast tekst - kun en linie: "; getline(cin, tekst); cout << "\nGenererer indhold..."; indhold = "- " + titel + " -\n\n" + tekst; cout << " \'" << indhold << "\'\nOpretter/aabner fil..."; ofstream f(str.c_str()); //FILE *fp; //fp = fopen(sti.c_str(), "w"); cout << "\nSkriver til fil..."; f << indhold; //fprintf(fp, indhold.c_str()); cout << "\nLukker fil..."; f.close(); //fclose(fp); cout << "\nSucces!\n\nTryk <ENTER> for at lukke dette vindue."; getchar(); }
Retunerer:
c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp: In function `int main()': c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp:33: `str' undeclared (first use this function) c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp:33: (Each undeclared identifier is reported only once c:\docume~1\admini~1\mydocu~1\c__~1\skabel~2\main.cpp:33: for each function it appears in.)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.