[C]Problem bei der Benutzung von Variablen mit open()

  • [C]Problem bei der Benutzung von Variablen mit open()

    Guten Morgen miteinander


    Ich habe ein kleines Problem wenn ich mit der Funktion open() eine Datei erstellen will. Hier erstmal kurz der Quellcode:

    Quellcode

    1. fflush(stdin);
    2. fgets(Kontonummer, 10, stdin);
    3. strncat(Dateipfad,Kontonummer,10);
    4. printf("%s",Dateipfad);
    5. open(Dateipfad, O_RDWR | O_CREAT);


    Der User gibt also quasi eine Nummer ein, diese Variable wird zusammen mit ner Konstanten zusammengefügt und dann soll open mir mit diesem Dateipfad eine Datei erstellen. Der Dateipfad wird vorher korrekt ausgegeben aber scheinbar will open nicht mit der Variable arbeiten. Hab ich da einen Denkfehler oder wo liegt das Problem?
  • Na die Datei soll die Eingabe des Benutzers als Namen haben, schließlich wird mit strncat die Eingabe an den Pfad angehangen.
    Nach strncat sieht die Variable dann so aus: [Laufwerk]:\\Programme\\[Programmordner]\\[Kontonummer (Benutzereingabe)]

    C von A bis Z kenn ich schon, hilft mir in diesem Fall aber nicht weiter.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von W0dan00 ()

  • Viel mehr Code gibts aber nicht ;)

    Kann ja mal kurz beschreiben was der Code macht:
    Erstellt mir ein Verzeichnis, wechselt in dieses Verzeichnis und dann soll er dort mit open und der variable ne Datei erzeugen.


    Da ich mit chdir bereits im Verzeichnis wo die Datei hin soll bin, hab ich auch schon versucht an open nur die variable Kontonummer zu übergeben. Aber er erstellt mir partout keine Datei. Wenn ich beispielsweise

    Quellcode

    1. open("123", O_RDWR | O_CREAT);

    schreibe, erstellt er ne Datei die 123 heißt. Das einzige Problem für mich ist dass er scheinbar die Variable nicht übernimmt. Das "printf" dient mir eigentlich nur um zu testen ob die Variable korrekt ist, was sie dann auch ist.
  • Ich hab mir die Links sehrwohl angesehen, jedoch lösen sie einfach mein Problem nicht.
    Es geht mir ja nicht darum etwas in die Datei reinzuschreiben oder den Stream wieder zu schließen sondern ich will eine Datei "erstellen". Mehr nicht. Die Funktion open funktioniert auch solange ich selber einen Dateinamen vorgeben, aber eben nicht wenn ich eine Variable für den Dateinamen verwenden will, und dort liegt mein Problem.

    Also um das ganze mal anschaulich zu machen:

    Funktioniert:

    Quellcode

    1. open("123", O_RDWR | O_CREAT);


    Funktioniert nicht:

    Quellcode

    1. int Variable = 123;
    2. open(Variable, O_RDWR | O_CREAT);
  • Ich bin jetzt nicht so der C-Profi aber ich hab mir mal die oben gepostete Definition von open() angeschaut. Der erwartet doch da ne Konstante als Pfadnamen. Das erklärt doch auch das verhalten: Ein String, den du einfach so hinschreibst is immer ne Konstante aber ne Variable logischerweise nicht.

    Versuch doch mal sowasin der Richtung (ob der Syntax jetzt 100% richtig is weiß ich nicht ;) )

    Quellcode

    1. fgets(Kontonummer, 10, stdin);
    2. strncat(Dateipfad,Kontonummer,10);
    3. const string DateipfadConst = Dateipfad;
    4. printf("%s",Dateipfad);
    5. open(Dateipfad, O_RDWR | O_CREAT);


    wenn das funktioniert kann man das bestimmt auch noch schöner lösen...
  • Willst du also aus deinem Programm Dateien mit verschiedenen Namen erstellen?
    Mit "open" ohne Verwendung von "write" erstellst du leere Dateien das sollte dir bisher schon klar sein?

    Und für die Sache mit den unterschiedlichen Dateinamen kannst du dir einmal die Beispiele aus den bisherigen
    Links mit "**argv" ansehen oder du darftst noch einiges über Zeiger ( engl.:pointer ) lernen.
    Hier noch ein Link dahin:
    hs-augsburg.de/~sandman/c_von_a_bis_z/c_014_007.htm
    und die folgenden Seiten vom Link auch ansehen!

    Ich bin mir immer noch nicht ganz sicher ob ich richtig verstanden habe was du möchtest
    oder ob du nicht verstehst was ich schreibe? Versuch das so präzise und knapp wie es dir möglich
    ist zu formulieren.

    Wenn deine Quellcodes nur kurze Übungsbeispiele sind poste sie komplett, denn dann können
    wir hier manchmal auch ohne exakte Beschreibung weiter helfen.

    MfG bcc-fan
  • @bcc-fan:
    Ja, ich will Dateien mit verschiedenen Namen erstellen und ja, mir ist klar dass ich damit nur leere Dateien erstelle ohne andere Funktionen hinzuzunehmen (wobei open() die Datei auch mit Lese-/Schreibzugriff öffnet in diesem Fall und ich sie somit auch beschreiben könnte, würden sie denn erstmal erstelle) ;)

    Mein erstes Ziel ist es, wie deine beiden Fragen schon andeuten, einfach Dateien mit verschiedenen Dateinamen zu erstellen, noch nicht schreiben oder sonstwas, nur erstellen. Weiß nicht ob ich es noch präziser ausdrücken kann, dachte aber das wäre schon klar.

    Pointer werd ich mir ansehen, hab bisher noch nicht viel damit gearbeitet ausser dass ich mit fopen und nem Zeiger ne Datei geöffnet hab aus der was ausgelesen wird.

    @Rondrer:
    Dein Vorschlag bringt leider auch keine Lösung oder ich versteh die Konstanten nicht so richtig, soweit ich weiß werden Konstanten im Präprozessor definiert und sind dann halt nicht veränderbar, Konstant halt^^


    Auf jeden Fall aber erstmal ein großes Danke dass ihr euch dem Problem annehmt.
  • Siehste richtig formuliert geht doch was ;)
    In die Suchmaschine: open more files c source
    dann den Müll überfliegen ;)
    Ach da war doch was - zwar ein wenig anders gelöst:
    hydrogenaudio.org/forums/lofiversion/index.php/t20221.html

    auch die Jungs versuchen sich an ähnlichem:
    daniweb.com/forums/thread93453.html


    MfG bcc-fan

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von bcc-fan ()

  • Hier eine Variante die auch in c funktionirt:

    Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <fcntl.h>
    4. #include <io.h>
    5. int main( )
    6. {
    7. char st1 [10]= "file";
    8. char ext [10]= ".txt";
    9. char filename [30] = {'\0'};
    10. int dieVar;
    11. int fh[5];
    12. for (dieVar=1; dieVar<4; dieVar++)
    13. {
    14. sprintf(filename, "%s%d%s", st1, dieVar, ext);
    15. if (fh[dieVar]=open(filename, O_RDWR|O_CREAT)==-1)
    16. {
    17. perror("Fehler bei open()");
    18. return EXIT_FAILURE;
    19. }
    20. close(fh[dieVar]);
    21. }
    22. return EXIT_SUCCESS;
    23. }
    Alles anzeigen


    MfG bcc-fan