Stream verstecken
-
Es sollte cross platform für den Anwender nicht auffindbar sein. Hmm ich habe es mit Klassen noch nicht so gut:
class file_ostream : ofstream
{
private:
std::ofstream tfs;
public:
file_ostream(const string& TmpFile) : tfs(TmpFile.c_str(), std::ios::out | std::ios::binary) {}
};class file_ifstream : ifstream
{
private:
std::ifstream codedfs;
public:
file_ifstream(const string& TmpFile) : codedfs(TmpFile.c_str(), std::ios::in | std::ios::binary) {}
};Dann in main:
file_ostream tfs(TmpFile);
tfs.put(NewByte);Damit bekomme ich foldende Fehler:
Multiple markers at this line
- ‘std::basic_ostream<char>’ is not an accessible base of
‘file_ostream’Vielen Dank für weitere Hilfe.
-
mike4 schrieb:
Es sollte cross platform für den Anwender nicht auffindbar sein.
Das wird schwierig, da das Konzept eines "Versteckt"-Attributes nur in Windows verbreitet ist.
Was hat die Frage mit deinem Code zu tun?
-
Unter Windows kannst du die Datei nicht verstecken. Ein Benutzer mit ausreichenden Rechten und passenden Tools kann zu jedem Prozess auflisten, welche Ressourcen der Prozess benutzt, und dazu gehören nun auch einmal Dateien.
Wenn der Dateiname (inkl. Pfad) frei wählbar ist kannst du ihn in dem Windows Ordnergewühl "verstecken". Mit genügend vielen kryptischen Unterverzeichnissen unter "c:\Dokumente und Einstellungen" kann man selbst hart gesottene Schnüffler abschrecken :D.
Für unversierte Benutzer reicht es wahrscheinlich schon, das "Hidden" Flag der Datei zu setzen und die Windows Explorer Optionen so einstellen, dass er keine versteckte Dateien mehr anzeigt. Das Verstecken einer Datei funktioniert mit derSetFileAttributesund dem FlagFILE_ATTRIBUTE_HIDDEN.
-
mike4 schrieb:
Es sollte cross platform für den Anwender nicht auffindbar sein. Hmm ich habe es mit Klassen noch nicht so gut:
class file_ostream : ofstream
{
...Damit bekomme ich folgende Fehler:
Multiple markers at this line
- ‘std::basic_ostream<char>’ is not an accessible base of
‘file_ostream’class file_ostream : public std::ofstream {
-
Es gibt ja auch noch das gute alte tmpfile: http://en.cppreference.com/w/cpp/io/c/tmpfile :xmas1:
-
Danke besonders out und publicer.
class file_ofstream : public std::ofstream
{
//private:
std::ofstream ttfs;
public:
file_ofstream(const string& TmpFile) : ttfs::open(TmpFile, std::ios::out | std::ios::binary) {}
};Damit bekomme ich:
Multiple markers at this line
- Symbol 'open' could not be resolved
- ‘ttfs’ is not a class or namespace
- expected ‘{’ before ‘open’Wenn ich open weglasse, rsp. in main:
file_ofstream ttfs(TmpFile);
// tfs.open(TmpFile, std::ios::out | std::ios::binary);habe ich ja dasselbe, der Clou liegt darin die Datei in der Klasse zu öffnen?
Nochmals vielen Dank für die Klassengestaltung.Danke auch cooky451, wenn Obiges nichts wird versuche ich deinen link.
-
Hallo,
nochmal zum mitschreiben.
1. Leite nie von
ofstreamundifstreamab. Das führt zu nichts. Bevorzuge immerhas-astattis-aBeziehung.
2. Verwende die Funktionenopenundclosenicht. Nutze RAII aus!
3. Dasoin ofstream steht für output. Was solltest du anderes mit einem ofstream machen, als etwas auszugeben? Was ich sagen will,std::ios::outist total überflüssig, es heist nicht umsonst ofstream. Analoges gilt fürifstream.
-
Jetzt bin ich völlig konfus...
class file_ifstream : public std::ifstream
{
//private:
std::ifstream codedfs;
public:
file_ifstream(const string& InFile1) : codedfs(InFile1.c_str(), std::ios::binary) {}
};file_ifstream codedfs(InFile1);
while(!codedfs.eof())
{Die while schlaufe bricht gleich ab da die Datei nicht richtig eingelesen wurde.
Ich möchte InFile1 ins memory einlesen, verändern(tmp unsichtbar) und mit einer anderen normalen ifstream Datei vergleichen.
Danke
-
Wieso zur Hölle willst du von den Streams erben? Was ist dein Ziel? Du verwirrst hier alle.
-
Na weil ich sowas wie unten brauche. Es funktioniert ja wenn ich ofstream tmp auf die Hd schreibe und wieder als ifstream öffne aber genau das will ich ja nicht.
while(!codedfs.eof())
Byte = codedfs.get();
tfs.close();
etc.
Danke
-
Nur hat das was du da machst rein garnichts damit zu tun.
Sag doch mal WAS du erreichen möchtest und nicht wie du es erreichen möchtest.
Eimne Datei kannst du jedenfalls nicht für den Nutzer unsichtbar anlegen, das geht nicht, höchstens oberflächlich verstecken.
-
-
Ethon schrieb:
Nur hat das was du da machst rein garnichts damit zu tun.
Du meinst du hast keine Ahnung?
Na ich werde dann halt mal cooky451s Vorschlag probieren.
-
mike4 schrieb:
Ethon schrieb:
Nur hat das was du da machst rein garnichts damit zu tun.
Du meinst du hast keine Ahnung?
Na ich werde dann halt mal cooky451s Vorschlag probieren.Nein, du hast keine Ahnung.
Du versteckst hier den Stream vor anderen Nutzern des Codes (den Tipp hast du bekommen, da du einige Poster verwirrt hast) und keine Datei vor Nutzern des Programms.Bei cookys Vorschlag wird die Datei unter Linux unter /tmp mit nem Schrottnamen angelegt, unter Windows in den Pfad für temporäre Dateien.
Wenn du ganz viel Glück hast wird bei kleinen Daten nie eine Datei angelegt und alles im RAM angelegt, aber darauf darfst du dich unter keinen Umständen verlassen, weiß nicht ob da irgendein OS eine entsprechende API anbietet.Die einzige Möglichkeit eine Datei richtig zu verstecken ist das Schreiben eines modifizierten Festplatten-/Dateisystemtreibers oder eines Rootkits. Da Beides nicht in Frage kommt, schreib die Datei einfach nie auf die Platte und gut.
-
Juhu damit scheint es zu klappen: stringstream
-
DocShoe schrieb:
Unter Windows kannst du die Datei nicht verstecken. Ein Benutzer mit ausreichenden Rechten und passenden Tools kann zu jedem Prozess auflisten, welche Ressourcen der Prozess benutzt, und dazu gehören nun auch einmal Dateien.
Wenn der Dateiname (inkl. Pfad) frei wählbar ist kannst du ihn in dem Windows Ordnergewühl "verstecken". Mit genügend vielen kryptischen Unterverzeichnissen unter "c:\Dokumente und Einstellungen" kann man selbst hart gesottene Schnüffler abschrecken :D.
Für unversierte Benutzer reicht es wahrscheinlich schon, das "Hidden" Flag der Datei zu setzen und die Windows Explorer Optionen so einstellen, dass er keine versteckte Dateien mehr anzeigt. Das Verstecken einer Datei funktioniert mit derSetFileAttributesund dem FlagFILE_ATTRIBUTE_HIDDEN.Du bist wohl einer von denen die Adminrechte für ihr Programm brauchen weil sie alles im Installationsordner spoeichern?