Datei Schreiben Minimalbeispiel



  • Hallo zusammen,
    ich habe ein kleines Problem. Irgendwie bekomme ich es weder hin eine Datei einzulesen, noch zu schreiben. Es scheint Probleme mit der Dateifindung zu geben.

    #include "stdafx.h"
    
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	fstream fs("test.txt", ios::in);
    	if (!fs.bad()){
            // Write to the file.
            fs << "Writing to a basic_fstream object..." << endl;
            fs.close();
        }
      fs.close();
      return 0;
    }
    

    Compilieren klappt ohne Fehler, nur es wird keine Datei geschrieben.
    Ich hoffe ihr könnt mir weiterhelfen.



  • Bist du dir auch sicher dass du die Datei im richtigen Ordner suchst?
    Und hast du auch die richtigen Rechte für dein Programm? Weil unter Vista und Windows 7 braucht man für manche Ordner Admin Rechte um in sie schreiben zu können.



  • Du verwendest wohl Vista / Win7 und hast keine Rechte, in dem Ordner Dateien anzulegen.



  • mh guck mal

    du gibst an dass du die datei einliest ( -> fstream fs("datei.txt", ios::in ) aber willst dann reinschreiben?



  • an den Rechten dürfte es eigentlich nicht liegen oder muss ich einem bestimmten Account zusätzliche Ordnerrechte geben.

    @Skym0sh0: Da hast du Recht. Hab beim Kopieren des Codes etwas falsch Sachen entfernt. Problem ist halt, dass der Fehler bei if (!fs.bad()) auftritt bzw. irgend ein Fehler entsteht bei der Initialisierung passiert, sodass der die angegebene Datei nicht findet und die If Überprüfung nicht übersteht.

    Vielleicht muss ich mein Problem auch von Beginn an beschreiben, als es von hinten auf zu korrigieren. Sorry, für das leichte Durcheinander!

    Grundsätzlich habe ich eine Datei, die ich einlesen möchte und dann in einem double Array abspeichere (muss nun wahrscheinlich binär eingelesen werden). anschließend möchte ich die Bytes (little/big endian) tauschen und wieder in eine Datei schreiben. Irgendwie klappt alles was ich so versucht habe nicht so richtig.

    int x[128][2];
    fs = open("test.txt", O_RDONLY);
    read(fd, x, 8*128*2); swapbytes(x, 128*2, 8);
    

    Diesen C-Code konnte ich an meinem alten Rechner noch compilieren. Nun klappt es leider nicht mehr. Daher habe ich versucht es anders zu lösen. Ich hoffe ihr könnt mir weiterhelfen. Ich nutzte den Compiler von Visual Studio 2010.



  • Das sieht ja übelst nach Microsoft Visual C++ cr*p aus...

    #include "stdafx.h"
    

    Ich persönlich hatte immer damit probleme... Niemand sonst?
    Bin jetzt sowieso ein Linux-freak, kein Visual Studio mehr 😞



  • jepp,
    mit g++ hat schon teilweise seine Vorteile 😉
    Mir steht gerade halt nur nicht das andere System zur Verfügung, wäre daher nett, wenn mir einer weiterhelfen könnte.



  • Existiert die Datei überhaupt, die du dort einlesen willst? Und bist du im richtigen Arbeitsverzeichnis?

    (außerdem stellt sich immer noch die Frage, ob du die Datei lesen oder schreiben willst)



  • Versuch mal "C:/datei".
    Versuch die Working directory zu ermitteln.. Visual Studio macht da sein ding draus... immer irgendwie anders..
    Versuch dein programm über cmd.exe aufzurufen. Da bist du dir sicher in welchem Verzeichniss du dich befindest.
    Versuch mal das gleiche C-ish: http://cplusplus.com/reference/clibrary/cstdio/fopen/

    char* buf = new char[256];
    
    // warning: file must exist. Else choose w+. fgets(..) should return EOF
    FILE* f = fopen("C:/Cats_are_awesome", "r+"); // read and write on existing file
    if (!f) fail
    fgets(buf,256,   f);
    // printf("fgets(..) returned: %s", buf);
    fputs("cats are very awesome",   f); // this overwrites
    fclose(f);
    


  • ja, ich befinde mich im Arbeitsverzeichnis. Konnte generell keine Datei einlesen.

    Daher war ich auch überfragt. Ich habe nun alles noch einmal neugestartet und siehe da es klappt! Ausgabe ist die Gleiche beim Compiler, wobei ich den EIndruck habe, dass da ein Fehler in Visual Studio bzgl. des Arbeitsspeichers/freien Speichers ist. (Der ist bei mir zurzeit sehr klein). Kann den Fehler jedenfalls nicht nachvollziehen.

    Vielen DANK euch allen für eure Bemühungen!!!
    Schönen Abend noch!



  • Visual Studio macht gar nichts komisches. Man kann damit ganz normalen Standard-C++-Code schreiben.

    #include <iostream>
    #include <fstream>
    
    int main()
    {
       std::ofstream writer(“file.txt“)
       if(writer)
       {
          writer << “test“;
       }
       else
       {
          std::cerr << “Fehler in stream\n“
       }
    }
    

Anmelden zum Antworten