2017-10-27 5 views
0

Ich öffne eine Textdatei und verarbeite die Wortzählfunktion, um Wörter zu zählen und eine Datei zu schließen. Als nächstes öffne ich die gleiche Datei erneut und speichern Sie es im Array mit Grenzwert für Wortzahl in einem Array.C Programmierung. Mit fopen fclose für Textdateioperationen

Hier, wenn ich fopen und fclose nur einmal wie in Zeile 1 und 16 verwenden, funktioniert mein Programm nicht. Aber wenn ich es öffne (Zeile 1) verarbeite es dann schließe es (Zeile 10) und öffne es wieder (Zeile 12) für den zweiten Prozess, mein Programm funktioniert. Bedeutet es, dass fopen immer nur einen Prozess verarbeiten kann und ich ihn für den zweiten Prozess wieder öffnen muss?

1. fptrr = fopen(fname,"r"); // open the text file in read mode 
2. 
3. if (fptrr == NULL) {//if file name does not match 
4.  printf("Error: No such file or directory"); 
5.  return -1; 
6.  } 
7. 
8. wordCount += countWords(fptrr); //run word count function and get the value of total words 
9. 
10. fclose(fptrr); // close the file 
11. 
12. fptrr = fopen(fname,"r"); 
13. for(int i=0;i<wordCount;i++){ // define size of loop equal to words in a file 
14. fscanf(fptrr, "%s", fileArray[i]); //scan and store in array 
15. } 
16. fclose(fptrr); 
+0

Wo ist die Definition von 'countWords()'? – Steve

+3

Nachdem Sie die Datei das erste Mal durchgelesen haben, sollten Sie 'fseek' verwenden, um zum Anfang der Datei zurückzukehren, um sie erneut zu verarbeiten. Deine Frage zu fopen, nur einen Prozess zu bearbeiten, finde ich sehr verwirrend. Könnten Sie das klären? – AntonH

+3

Oder Verwenden Sie [Zurückspulen] (http://en.cppreference.com/w/c/io/rewind). – BLUEPIXY

Antwort

5

Sie können tun, was Sie wollen, zu der Datei, während es geöffnet ist.

Ich vermute, dass Ihr Problem ist, dass Sie in einer Reihe von Operationen bis zum Ende der Datei lesen und dann versuchen Sie, die Datei erneut zu lesen, während Sie am Ende sind. Suchen Sie nach der rewind() Funktion

Um zum Anfang der Datei zurückzuspulen, rufen Sie einfach rewind(fptrr); nach den ersten Zählwörtern. Alternativ können Sie fseek(fptrr, 0L, SEEK_SET) anrufen, aber rewind() ist klarer.

Beachten Sie, dass das Schließen der Datei und das erneute Öffnen die Datei automatisch zurücksetzt, um den Start zu lesen, weshalb Ihre neue Version funktioniert.

+0

Danke, es funktioniert jetzt. – SONI