Markus Pitha: Mit C Programm auf Datei über Pfad zugreifen?

Hallo,
Ich habe kurz mal eine kleine Frage zu einem Mini-C-Programm. Ich will eine Datei zum Lesen öffnen, und wenn diese nicht existiert, soll sie angelegt werden. Das funktioniert eigentlich auch ganz gut, solange ich im gleichen Verzeichnis bleibe, absolute oder relative Pfade angebe.
Gebe ich als Pfad aber so etwas an "~/ffconfig.txt" (wir nehmen jetzt an, dass dieser Pfad und die Datei tatsächlich unter /home/user/config.txt existiert), liefert die fopen Funktion trotzdem immer NULL zurück, auch wenn die Datei bereits existiert, da es anscheinend mit dem ~ nichts anfangen kann. Ich will aber ~ verwenden, da es theoretisch ein Programm sein könnte, das weitergegeben wird, und eben die Datei und/oder das Verzeichnis im Home Verzeichnis des aktuellen Users anlegen soll. Was kann ich hier tun?

#include <stdio.h>
#include <stdlib.h>

int main(void)    {
  FILE  *fp;
  char filepath[] = "~/ffconfig.txt";

if ((fp = fopen(filepath, "r")) == NULL)    {
    puts("\nFile was not found...File will be created");
                 if ((fp = fopen(filepath, "w")) == NULL)    {
                 puts ("An Error occurred while creating the config file.");
                 exit(1);
                 }
    }   else  {
    puts("File already exists.");
    fclose(fp);
    }

return 0;
}
Markus.

--
sh:( fo:| ch:? rl:( br:> n4:( ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:] js:|
  1. Gebe ich als Pfad aber so etwas an "~/ffconfig.txt" (wir nehmen jetzt an, dass dieser Pfad und die Datei tatsächlich unter /home/user/config.txt existiert), liefert die fopen Funktion trotzdem immer NULL zurück, auch wenn die Datei bereits existiert, da es anscheinend mit dem ~ nichts anfangen kann.

    ~ wird von der Shell in der Kommandozeile durch den Inhalt von $HOME ersetzt (wie vieles anderes), genau das wirst Du auch machen müssen. Sicherlich wird Dich in diesem Zusammenhang getenv() brennend interessieren.

    1. Hi,

      ~ wird von der Shell in der Kommandozeile durch den Inhalt von $HOME ersetzt (wie vieles anderes), genau das wirst Du auch machen müssen. Sicherlich wird Dich in diesem Zusammenhang getenv() brennend interessieren.

      Danke, ich glaube mit dieser Funktion werde ich das so weit hinbekommen.

      Markus.

      --
      sh:( fo:| ch:? rl:( br:> n4:( ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:] js:|