Problem mit Dev-Cpp

paddymann

Mitglied
Hallo!
Ich habe hier gerade ein sonderbares Problem:
Ich habe folgenden Code:

Code:
#include <iostream>
#include <fstream.h>
#include <stdlib.h>

using namespace std;

int main()
{
    fstream Out;
    Out.open("test.txt", ios::in|ios::out);

      system("PAUSE");
      return 0;
}

Wenn ich diesen Code mit Dev-C++ Compiliere und Ausführe funktioniert alles prima und die Datei test.txt wird auch erstellt.
Versuche ich den Code allerdings mit Dev-Cpp Version 4.9.9.2 zu compilieren, bekomme ich erstmal diesen Fehler:
Code:
2 C:\Programme\Dev-Cpp\include\c++\3.4.2\backward\fstream.h:31,
In file included from C:/Programme/Dev-Cpp/include/c++/3.4.2/backward/fstream.h:31

32:2 C:\Programme\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h 
#warning This file includes at least one deprecated or antiquated header. 
Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.

Bei anderem Code den ich irgendwie unter Version 4.9.9.2 zum Laufen gekriegt habe wurde allerdings die Datei "test.txt" nicht erstellt. Egal wie ich es probiert habe, die Datei wurde nur bei der .exe erstellt, die ich mit Version 4 compiliert hab?

Woran liegen die beiden Probleme bei 4.9.9.2? Ist in den Compiler-Optionen etwas nicht richtig eingestellt? Ich habe da nichts gefunden.

Wäre froh über Antworten.
Vielen Dank!
mfg
.patrick
 
Zuletzt bearbeitet:
Hi.
Wenn ich diesen Code mit Dev-C++ Compiliere und Ausführe funktioniert alles prima und die Datei test.txt wird auch erstellt.
Versuche ich den Code allerdings mit Dev-Cpp Version 4.9.9.2 zu compilieren, bekomme ich erstmal diesen Fehler:
Code:
2 C:\Programme\Dev-Cpp\include\c++\3.4.2\backward\fstream.h:31,
In file included from C:/Programme/Dev-Cpp/include/c++/3.4.2/backward/fstream.h:31

32:2 C:\Programme\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h 
#warning This file includes at least one deprecated or antiquated header. 
Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
Erstmal ist das kein Fehler, sondern nur eine Warnung. Es kann im Allgemeinen nicht schaden, die Meldungen auch zu lesen.
Bei anderem Code den ich irgendwie unter Version 4.9.9.2 zum Laufen gekriegt habe wurde allerdings die Datei "test.txt" nicht erstellt. Egal wie ich es probiert habe, die Datei wurde nur bei der .exe erstellt, die ich mit Version 4 compiliert hab?

Woran liegen die beiden Probleme bei 4.9.9.2? Ist in den Compiler-Optionen etwas nicht richtig eingestellt? Ich habe da nichts gefunden.
Daran liegt es nicht. Das unterschiedliche Verhalten liegt an den Compilerversionen. Außerdem ist dein Code nicht ganz richtig.

Wie der Compiler schon sagte, sollten die Header der C++ Standardbibliothek ohne Endung eingebunden werden. Es sollte heißen:
C++:
#include <fstream>
Wenn du Header der C Standardbibliothek verwenden willst, werden diese mit dem Präfix "c" und ebenfalls ohne Endung eingebunden:
C++:
#include <cstdlib>
Dann ist es so, das die Datei beim Modus "ios::in | ios::out" bereits existieren muss. D.h. wenn die test.txt Datei vom Programm, was vom alten Compiler übersetzt wurde, erzeugt wird, ist das ein Fehler im Compiler (der ja anscheinend bereits berichtigt ist).

Wenn du die Datei kreieren willst, kannst du z.B. den Modus "ios::in | ios::out | ios::trunc" nehmen. Die Datei wird dann beim Öffnen immer auf 0 Byte gestutzt.

Gruß
 
Danke deepthroat. Deine Antwort hat mich schon sehr viel weitergebracht.
Ich habe jetzt folgenden Code:
Code:
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    fstream Out;
    Out.open("test.txt", ios::in|ios::out|ios::trunc);

      system("PAUSE");
      return 0;
}

Dieser Code funktioniert jetzt auch mit Dev-C++ 4.9.9.2.
Allerdings möchte ich auch eine nicht existente Datei erstellen können, ohne das eine eventuell doch vorhandene Datei durch "ios::trunc" gelöscht wird. Ich habe es mit "ios::app" probiert, doch dann wird die Datei nicht erstellt.
Gibt es einen Aufruf mit dem ich nicht existierende Dateien erstellen kann und der vorhandene Dateien nicht löscht?

mfg
 
Allerdings möchte ich auch eine nicht existente Datei erstellen können, ohne das eine eventuell doch vorhandene Datei durch "ios::trunc" gelöscht wird. Ich habe es mit "ios::app" probiert, doch dann wird die Datei nicht erstellt.
Gibt es einen Aufruf mit dem ich nicht existierende Dateien erstellen kann und der vorhandene Dateien nicht löscht?
Nein, einen einzelnen solchen open-Modus gibt es nicht (siehe http://rafb.net/efnet_cpp/tutorials/iostream_openmode.html). Aber mit ios::app sollte es funktionieren:
C++:
// 1) versuchen Datei zu öffnen bzw. zu kreieren...
fstream datei("test.txt", ios::out | ios::app);

if (datei.is_open()) {
  datei.close();

  // 2) Datei im entsprechenden Modus öffnen...
  datei.open("test.txt", ios::in | ios::out);
  
  if (datei.is_open()) {
    // ...
  } else // fehler
} else // fehler
Gruß
 
Zurück