Wie Dateien öffnen?



  • Hallo!

    Ich mache meine ersten Versuche, Dateien in C zu öffnen, bearbeiten und zu schließen.

    Die folgenden Zeilen habe ich programmiert und möchte eine bereits vorhandene Datei testfile1.txt öffnen.
    Nachdem ich den Debugger (Visual Studio 2010) starte, erhalte ich nur einen schwarzen Konsolenmonitor.

    Was mache ich falsch? 😕

    #include <stdio.h>
    
    int main(void)
    {
    	FILE *dateizeiger;
    
    	dateizeiger = fopen("c:\documents\Dateien\testfile1.txt","r");
    
    	if (dateizeiger != NULL)
    		fclose(dateizeiger);
    
    	getchar();
    }
    


  • Bei deinem momentan vorhandenen Programm ist das auch richtig so. Du musst mit deiner Variable dateizeiger und Den Funktionen fscanf, fgets, ... Daten aus der Datei lesen und mit printf anzeigen um Ausgaben zu erhalten.

    P.S. Auf dieser Seite findest du alle Ein- und Ausgabefunktionen http://cplusplus.com/reference/clibrary/cstdio/



  • C interpretiert in Stringliteralen (der Text zwischen den "") sogenannte Escape-Sequenzen
    Eine kennst du sicherlich vom Zeilenvorschub: \n

    Darum muss man in Stringliteralen den Backslash doppelt angeben:

    dateizeiger = fopen("c:\\documents\\Dateien\\testfile1.txt","r");
    

    ledi schrieb:

    erhalte ich nur einen schwarzen Konsolenmonitor.

    Was erwartest du?
    Du machst doch keine Ausgabe.



  • Soweit funktioniert die Sache schon mal ganz gut.
    Jetzt möchte ich automatisch 10 Dateien erstellen (test1.txt, test2.txt ...usw bis test10.txt)

    Wie kann ich das lösen?
    Ich habe bereits versucht, anstelle von test1.txt test%s.txt, x++; reinzubauen. Aber das klappt leider nicht.

    int main(void)
    {
    	char x=1;
    	FILE *dateizeiger;
    	char *datei = "c:\\documents\\Dateien\\test1.txt";
    
    	dateizeiger = fopen(datei,"w"); 
    
    	if (dateizeiger == NULL)  // Wenn Fehler beim Öffnen der Datei
    	{
    		exit(1);	  //Beendet das Programm an dieser Stelle, leert alle Puffer und schließt alle geöffneten Dateien
    	}
    
    	else
    


  • Nimm mal

    char datei[FILENAME_MAX] = "c:\\documents\\Dateien\\test%d.txt";
    oder auch gleich
    char datei[FILENAME_MAX] = "c:/documents/Dateien/test%d.txt";
    

    als Muster, dann sollte es für dich nicht mehr allzu schwierig sein.



  • Hmmmmm???

    Also so ganz komme ich damit nicht zurecht!
    Kanst du mir das bitte etwas erklären?



  • Die Formatspecifier (%s %d und % ...) gibt es so nur bei der printf-Familie.²

    Du musst dir den Dateinamen vorher zusammenbauen.
    Schau dir mal sprintf an.

    ² strftime hat auch welche und für die Eingabe halt scanf.



  • Hab´s jetzt gelöst! 🙂

    Die Dateien kann ich aber nur in einem bereits bestehenden Ordner erzeugen.
    Wie kann ich vom Programm heraus einen neuen Ordner erstellen lassen?

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(void)
    {
    	char buffer[50];		// Bufferdatei für sprintf() deklarieren
    	FILE *dateizeiger;
    
    	for (int j=1; j<=10; j++)
    	{
    		sprintf(buffer, "c:\\documents\\Dateien\\Test%d.txt", j); // Dateien Test.j erzeugen und in buffer speichern
    
    		char *datei = buffer;	
    		dateizeiger = fopen(datei,"w"); 
    
    		if (dateizeiger == NULL)  // Wenn Fehler beim Öffnen der Datei
    		{
    			exit(1);       //Beendet das Programm an dieser Stelle, leert alle Puffer und schließt alle geöffneten Dateien
    		}
    
    		else
    		{
    			for (int i=0; i<=100; i++)
    			{
    				fprintf(dateizeiger,"Hallo, das ist ein Test!\n");
    			}
    		}
    		fclose(dateizeiger);
    	}
    	return 0;
    }
    


  • ledi schrieb:

    Wie kann ich vom Programm heraus einen neuen Ordner erstellen lassen?

    Mit Standardmitteln gar nicht.
    Das ist Systemabhängig.
    Du kannst ja mal Google bemühen mit "msdn create-directory"

    ledi schrieb:

    char *datei = buffer;	
    		dateizeiger = fopen(datei,"w");
    

    Warum führst du denn da noch *daten ein?



  • bereinigt!

    //char *datei = buffer;	
    		dateizeiger = fopen(buffer,"w");
    

Anmelden zum Antworten