Code der eigentlich funktionieren sollte (Dateioperation)

FBIagent

Erfahrenes Mitglied
Moin,

ich habe folgendes Problem: Code für Dateioperation der einmal funktioniert hat will auf eimal nicht mehr.

Ich benutze den Code eigentlich so wie immer. Compiliert wird auch ganz normal nur
wenn ich das Programm starte und es soll in eine Datei geschrieben werden, wurde die datei zwar erstellt, aber sie hat keinen inhalt...

Code:
#ifndef MY_FILEIO_H
#define MY_FILEIO_H

#include <iostream>
#include <fstream>

class fileIO
{
private:
  std::ofstream ofstreamFile;
  std::string fileName;
public:
  fileIO(std::string);
  std::ifstream ifstreamFile;
  bool openIf();
  bool openOf();
  void write(std::string);
  void closeIf();
  void closeOf();
};

#endif

--------------------------------------------------------------------------------
#include ".\fileIO.h"

fileIO::fileIO(std::string data)
{
  fileName = data;
}

bool fileIO::openIf()
{
  ifstreamFile.open(fileName.c_str());
  
  if (!ifstreamFile.is_open())
    return false;
  
  return true;
}

bool fileIO::openOf()
{
  ofstreamFile.open(fileName.c_str());
  
  if (!ofstreamFile.is_open())
    return false;
  
  return true;
}

void fileIO::write(std::string data)
{
  ofstreamFile << data;
//  ofstreamFile.flush();
}

void fileIO::closeIf()
{
  ifstreamFile.close();
}

Folgender Code zum testen:
Code:
int productions = shopEntriesProductions.size();
    fileIO streamMulti("multisell.xml");

    if (!streamMulti.openOf())
    {
        wxMessageBox("Could not create file.", "Build Multisell", wxOK | wxICON_ERROR, this);
        return;
    }

    streamMulti.write("<?xml version='1.0' encoding='utf-8'?>\n\n\n<list>\n\n");

    for (int i=0;i<productions;i++)
    {
        int needed = shopEntriesCosts[i].size();

        streamMulti.write("  <item id=\"");
        streamMulti.write(extraStr.intToStr(i));
        streamMulti.write("\"\n");
        streamMulti.write("    <production id=\"");
        streamMulti.write(extraStr.intToStr(shopEntriesProductions[i]));
        streamMulti.write("\" count=\"1\" enchant=\"0\"/>\n");

        for (int j=0;j<needed;j++)
        {
            streamMulti.write("    <ingredient id=\"");
            streamMulti.write(extraStr.intToStr(shopEntriesCosts[i][j]));
            streamMulti.write("\" count=\"1\" enchant=\"0\"/>\n");
        }

        streamMulti.write("  </item>\n");
    }

    streamMulti.write("\n</list>");
    streamMulti.closeOf();
    wxMessageBox("Build Multisell Successfull.", "Build Multisell", wxOK | wxICON_INFORMATION, this);
    freeUp();

Ich habe es aber auch schon mit einem ganz simpelem Codeschnipel versucht hatte
allerdings auch dabei kein Erfolg:
Code:
fileIO testStream("texst.txt");
testStream.openOf();
testStream.write("Test");
testStream.closeOf();

Ich hoffe das mir jemand helfen kann.

THX in Advance
MFG FBIagent
 
Hi.

Also erstmal kann ich nicht nachvollziehen wozu die fileIO Klasse gut sein soll - außer um sich selbst in den Fuß zu schiessen.
FBIagent hat gesagt.:
Code:
void fileIO::write(std::string data)
{
  ofstreamFile << data;
//  ofstreamFile.flush();
}
Wurde denn hier etwas erfolgreich in den Stream geschrieben? (=> Rückgabewert prüfen)

Du solltest performancehalber den Parameter als const std::string& übergeben.

Gruß
 
Der Streamausgabeoperator für strings ist definiert als:
C++:
ostream& operator<< (const string&)

Deswegen kann man eben auch Ausgaben miteinander verketten:
C++:
cout << "sdfk" << 2 << askdfj << endl;
weil der Stream selbst als Ergebnis der Ausgabeoperation zurückgegeben wird.

Für die Streams ist auch der operator void*() definiert welcher benutzt wird um das Stream Objekt in einen boolschen Wert zu konvertieren. Also:
C++:
if (!(ofstreamFile << data)) {
  cerr << "Fehler: konnte nicht in Stream schreiben.\n";
}

Gruß
 
Woran könnte es denn liegen das ich nicht in eine Datei schreiben kann?
Sonst ging es so auch immer auch ohne den check.
 
So ich hab noch bisl rumprobiert... und bin zum ergebniss gekommen das ich keine
escape Sequenzen schreiben kann. Schön und gut, für \n hatt man ja std::endl.
Aber jetzt habe ich noch die escape Sequenz \". Gibt es da auch soetwas wie std::endl?

THX im Vorraus
MFG FBIagent
 
FBIagent hat gesagt.:
Woran könnte es denn liegen das ich nicht in eine Datei schreiben kann?
Sonst ging es so auch immer auch ohne den check.
Man sollte immer prüfen ob Ein-/Ausgabeoperationen erfolgreich waren oder nicht.
FBIagent hat gesagt.:
So ich hab noch bisl rumprobiert... und bin zum ergebniss gekommen das ich keine
escape Sequenzen schreiben kann. Schön und gut, für \n hatt man ja std::endl.
Aber jetzt habe ich noch die escape Sequenz \". Gibt es da auch soetwas wie std::endl?
Das ist ziemlich unwahrscheinlich das du keine Escape-Sequenzen in einen Dateistream schreiben kannst. Mach mal ein minimales, kompilierbares Beispiel wo das Problem auftritt.

Du kannst statt der doppelten Anführungsstriche in XML auch die einfachen Anführungsstriche verwenden.

Gruß
 
Zurück