statische Pfadangaben - in einer Anwendung gehts in der anderen nicht.



  • Hallo zusammen!

    Ich habe zwei Anwendungen. Eine Anwendung heißt startup_time.exe und die andere heißt uptime.exe. Die Startup_time wird über den Autostartordner unter Windows XP SP1 gestartet und ließt die Systemzeit aus, die das Programm in eine uptime.txt schreibt. Den Pfad für die uptime.txt bekommt das Programm aus einer "config.txt", die im selben Verzeichnis liegt, wie die startup_time.exe auch.

    Nun habe ich ein zweites Programm, welches der Anwender über die Konsole, oder besser die Eingabeaufforderung, startet. Dieses Programm liest die uptime.txt aus, holt sich die Systemzeit und errechnet dann die Zeit, die der Computer nun schon an ist. Den Pfad zu der uptime.txt erfährt, das Programm über durch die selbe "config.txt", wie auch die startup_time.

    Das Problem ist nun, dass die Startup_time die "config.txt" öffnen kann, die uptime.exe aber nicht. Obwohl bei den selben Quellcode zum Auslesen benutzen.

    Beide Programme sind mit Borland C++ Builder 6 geschrieben. Ich poste mal nur den Teil, der die config.txt ausliest. Wer den Fehler versuchen möchte nachzuvollziehen, der möge bitte eine Mail an Etha_405@gmx.de senden. Ich schicke dann alle nötigen Dateien zurück.

    Danke schon mal für eure Hilfe,

    Chris

    Auszug aus uptime.cpp

    void init (void)
    {
        FILE *config;
        char store_char[100], character;
        int i;
    
        config = fopen("config.txt","r");
    
        if(config == NULL)
        {
            std::cout << "Config file config.txt could not be found. Please create";
            std::cout << "it in the home folder of uptime.exe. \n\n";
            getch();
            exit(0);
    
        }
    
        for(i = 0; (character = getc(config)) != '='; i++)
        {
         store_char[i] = character;
    
        }
        store_char[i+1] = '\0';
    
        if(call.stringcompare(store_char, "path", i) == 0)
        {
            fseek(config,i+1,SEEK_SET);
            for(i = 0; (character = getc(config)) != '\n'; i++)
            {
                set.path[i] = character;
            }
            set.path[i+1] = '\0';
        }
        fclose(config);
    }
    

    Auszug aus der Startup_time.cpp

    void init (void)
    {
        FILE *config;
        char store_char[100], character;
        int i;
    
        config = fopen("config.txt","r");
    
        if(config == NULL)
        {
            std::cout << "Config file config.txt could not be found. Please create";
            std::cout << " it in the home folder of uptime.exe. \n\n";
            getch();
            exit(0);
        }
    
        for(i = 0; (character = getc(config)) != '='; i++)
        {
         store_char[i] = character;
    
        }
        store_char[i+1] = '\0';
    
        if(call.stringcompare(store_char, "path", i) == 0)
        {
            fseek(config,i+1,SEEK_SET);
            for(i = 0; (character = getc(config)) != '\n'; i++)
            {
                set.path[i] = character;
            }
            set.path[i+1] = '\0';
        }
    
        fclose(config);
    }
    


  • Hallo,

    Dein Programm versucht die config.txt in der current-Directory zu öffnen. Wo liegt denn uptime.exe? Wenn sie in einem anderen verzeichnis liegt kann sie ja nicht gefunden werden.
    Wenn config.txt immer im selben verzeichnis ist kannst du ja mit absoluten Pfaden arbeiten.
    Wieso verwendest du bei C++ eigentlich die C-Style Fileroutinen. Es gibt doch streams.



  • Hi!

    Die uptime.exe, startup_time.exe, config.txt und die uptime.txt liegen im gleichen Verzeichnis. Ich wollte nicht mit absoluten Pfadangaben arbeiten, weil ein Kumpel, der das Programm dann auch benutzen möchte eine andere Verzeichnisstruktur hat. Ein Beispiel:

    Bei mir heißt das root-Verzeichnis C:\winnt bei meinem Kumpel D:\windows.

    Ich benutze C-Style Fileroutinen, weil ich es so gelernt habe. Mir ist lange Zeit C als C++ verkauft worden. Ich befinde mich gerade in der Umstellung.


Anmelden zum Antworten