08. juni 2007 - 08:58Der er
6 kommentarer og 1 løsning
Hvordan tjekker man om en fil er åben
Hej Eksperten
En kammerat spurgte mig hvordan man kunne tjekke om en fil var åben eller ej, og det ville jeg da lige vise ham i C++. Men det var åbenbart for stor en opgave, for en praktisk test af min kode viste at det ikke virkede som jeg troede.
ifstream is; filebuf * fb;
fb = is.rdbuf(); fb->open("test.log",ios::in);
if ( fb->is_open() ) cout << "file is open.\n"; else cout << "file is not open.\n";
fb->close();
Jeg troede at is_open ville returnere FALSE hvis en fil allerede var åben, men det gør den altså ikke. Måske bruger jeg metoden helt forkert. Så er der nogen der lige kan forklare mig hvordan hele det her "Filen er i brug (åben)" halløj fungere.
#include <iostream> #include <fstream> int main() { std::ifstream In("whatever.txt"); if(In.is_open()) { In.close(); std::cout << "File was opened" << std::endl; if(In.is_open()) std::cout << "The file is still open" << std::endl; else std::cout << "The file is now closed" << std::endl; } else std::cout << "Did not open the file" << std::endl; }
Programmet her bør skrive: File was opened The file is now closed Hvis whatever.txt findes
Ja, men hva'så hvis jeg har filen åbnet i et andet program. f.eks. notepad samtidig. Bør den så stadig beklage sig over filen er åben og derfor ikke kan åbnes?
Hvis et andet program har filen åben på samme tid som du forsøger at åbne den vil du ikke kunne åbne filen. Men som Erik skriver holder de færreste programmer filen på disken åben mens der arbejdes på den, programmerne arbejder med filen i hukommelsen.
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.