Passwort mit Sternchen verbergen und Datei einlesen
-
Ich komme nicht klar mit dem Passwort...

Mein Projekt ist dilogbasierend. Soll ich für den Editfeld des Passworts eine Variable vom Typ CEdit hinzufügen? Jetzt ist sie vom Typ CString. Oder ich kann trotzdem mit CString weiter machen? Man kann einen Zeiger von CEdit erstellen, aber wie geht man weiter vor?
-
Noch_Student schrieb:
Soll ich für den Editfeld des Passworts eine Variable vom Typ CEdit hinzufügen?
Ja, das wäre ein Möglichkeit.
(Wenn du mit dem Ressourcen-Editor umgehen kannst, öffne die Properties für dein Edit-Feld, wechlse auf den Tab Styles und setz dort ein Häkchen vor "Passwort")
-
Wirklich einfach!
Bei mir heißt es nur Kennwort.
Wenn die Oberfläche wieder geladen wird, steht im Editfeld für Passwort nichts, ich möchte gerne, dass da Sternchen stehen. Ist es möglich?
-
Klar - du mußt nur einen Wert dort eintragen (das Editfeld zeigt so viele Sternchen an, wie der eingegebene Text Zeichen enthält).
-
Noch_Student schrieb:
Wenn die Oberfläche wieder geladen wird, steht im Editfeld für Passwort nichts
Entschuldige, ich hab ein bischen angetan. :p
Alles funktioniert wunderbar!
-
CStoll schrieb:
@2: Lies die Daten mal Byteweise per fgetc()(oder istream::get()) ein und lass dir den numerischen Wert der Trennzeichen ausgeben, das hilft weiter als die Bezeichnung "komische Zeichen":
ifstream datei("daten.txt",ios::in|ios::binary); char c; while(datei.get(c)) { cout<<c<<'\t'<<(int)c<<endl; }(ich vermute, es sind entweder \n (alleinstehend können Windows-Programme nicht viel damit anfangen) oder Längenangaben für die nachfolgenden Werte)
Hallo CStoll,
habe deine Anweisung erledigt.
In dem, was ich bekommen habe, sehe ich kein System. Für '\n' ist nichts angekommen (so weit ich das verstehe). Am Anfang steht der erste int-Wert, danach drei nullen, danach der zweite int-Wert, danach drei nullen. Die Nullen stehen unter einander. Danach kommt 23 (Ende des Übertragungsblockes?). Danach die string-Werte. Zwischen String-Werten steht das Zeichen 19 (Gerätekontrollkode 3???). Vor der IP-Adresse, die auch als string gespeichert ist, steht das Zeichen 14 (Alternative Text-Darstellung?). Was kann man damit anfangen?
Wenn ich unklar geschrieben habe, kann ich ausführlicher machen. Danke voraus.
-
Bei dem System würde ich fast vermuten, daß die String-Ausgaben längencodiert sind (1 Byte Stringlänge n, danach n Byte Text) oder es je nach Zweck verschiedene Trennzeichen gibt.
(btw, die drei Null-Bytes gehören jeweils mit zum int-Wert - wenn du mal mit Werten über 255 arbeitest, siehst du den Unterschied ;))
PS: Kommst du an den Quelltext des Programms ran, von dem die Daten stammen. Wenn ja, könntest du dort mal nachsehen, wie sie abgespeichert werden.
-
Meinst du, dass ich die Textdatei und die Ausgabe von numerischen Werten vergleichen soll? Habe ich schon gemacht... Die Reihenfolge stimmt zumindest, ansonsten sehe ich kein System, wie gesagt.
-
Noch_Student schrieb:
Meinst du, dass ich die Textdatei und die Ausgabe von numerischen Werten vergleichen soll? Habe ich schon gemacht... Die Reihenfolge stimmt zumindest, ansonsten sehe ich kein System, wie gesagt.
Ich meinte, du solltest mal nachzählen, wieviele Textzeichen direkt nach einem (z.B.) 19 oder 14 kommen.
(und wenn du kannst, schau dir mal das Programm an, das diese Datei erzeugt hat)
-
Du hasr recht, vor den strings werden die zugehörigen Längen angegeben, jeweils 23, 19, 14 u.s.w.
-
Hi,
ich bleibe auf meinem Problem...
Weiß nicht, was ich machen soll, um meine Textdatei einzulesen. Man kann die Strings-Werte mit solchen Wörtern wie z.B. 'Passwort:', 'IP-Adresse:' u.s.w. bei der Speicherung versorgen. Aber wie dann die Datei einlesen?
Und int-Werte kann ich überhaupt nicht einlesen. Kann jemand mir etwas empfehlen?
-
Für das einlesen ist es wohl besser, die Reihenfolge der Elemente konstant zu halten - da kannst du später von oben nach unten lesen und jeden Wert in die richtige Variable packen. Die int-Werte kannst du per read() als Binärwert einlesen (oder du bastelst sie dir mit Bit-Operatoren aus den einzelnen Bytes zusammen :D).
PS: Auch auf die Gefahr hin, mich zu wiederholen - schau dir die Funktion an, mit der die Datei geschrieben wurde (wenn es ein MFC-Projekt ist, heißt sie vermutlich Serialize()).
-
CStoll schrieb:
Für das einlesen ist es wohl besser, die Reihenfolge der Elemente konstant zu halten - da kannst du später von oben nach unten lesen und jeden Wert in die richtige Variable packen. Die int-Werte kannst du per read() als Binärwert einlesen (oder du bastelst sie dir mit Bit-Operatoren aus den einzelnen Bytes zusammen :D).
PS: Auch auf die Gefahr hin, mich zu wiederholen - schau dir die Funktion an, mit der die Datei geschrieben wurde (wenn es ein MFC-Projekt ist, heißt sie vermutlich Serialize()).
Kann man in einer mit Serialize angelegten Datei die Inhalte überhaupt in einem Editor sehen? Das wird doch da binär gespeichert und dürfte doch zum mindest in einem Editor nocht so leicht zu lesen sein. Grundsätzlich sollte ja die gleiche Technik für das Lesen wie für das Schreiben beim Dateizugriff verwendet werden. Wenn die Serialize-Technologie mit dem Stream verwendet wurde braucht man schon die genaue Reihenfolge der Daten, sonst kanns nicht immer funktionieren.
-
Textdaten (CString) sehen auch dann noch verwertbar aus, wenn sie binär gepseichert wurden*
(und ich bin mir zwar nicht sicher, aber MFC wird da nicht viel anderes machen als den String mit Längenangabe rauszuschreiben - ich habe mich bisher nur oberflächlich mit der Serialisierung beschäftigt)* außer vielleicht, irgendwer macht sich die Mühe, die Daten vor dem Schreiben zu verschlüsseln und/oder komprimieren
-
Ich schreibe meine Daten so:
UpdateData(TRUE);
Edit_1 = memberEdit_1;
Edit_2 = memberEdit_2;
Edit_3 = memberEdit_3;
CFile Datei;
Datei.Open(DATEINAME,CFile::modeCreate|CFile::modeWrite);
CArchive ar(&Datei,CArchive::store);
ar << Edit_1;
ar << Edit_2;
ar << Edit_3;
ar.Close();
Datei.Close();Und lade sie so (um auf der Oberfläche zu zeigen):
CFile Datei;
Datei.Open(DATEINAME, CFile::modeRead);
CArchive ar(&Datei, CArchive::load);
ar >> nAlarm_Server_Port;
ar >> nSmtp_Port;
ar >> sAms_Rcp_Pasword;
memberEdit_1 = Edit_1;
memberEdit_2 = Edit_2;
memberEdit_3 = Edit_3;
ar.Close();
Datei.Close();
UpdateData(FALSE);Alles in einer bestimmten Reihenfolge. Das alles in einer MFC-Anwendung. Jetzt soll ich genau diese Textdatei (das sind die Konfigurationdaten einer Schnittstelle) in der Konsolenanwendung (die Schnittstelle selber) einlesen und verwenden.
-
Möglichkeit 1: Ich bin mir nicht 100% sicher, aber afaik kannst du auch Konsolen-Projekte mit MFC-Unterstützung anlegen - und dann die selbe Lösung (über CArchive) verwenden, um deine Datei einzulesen.
Möglichkeit 2: Alternativ kannst du CArchive weglassen und die Daten in einem selbstgewählten Format per CFile/CStdioFile oder fstream lesen und schreiben.
-
CStoll schrieb:
Möglichkeit 2: Alternativ kannst du CArchive weglassen und die Daten in einem selbstgewählten Format per CFile/CStdioFile oder fstream lesen und schreiben.
Kanns du ein Bsp. geben, wie man das machen kann?
-
CStoll schrieb:
Möglichkeit 1: Ich bin mir nicht 100% sicher, aber afaik kannst du auch Konsolen-Projekte mit MFC-Unterstützung anlegen - und dann die selbe Lösung (über CArchive) verwenden, um deine Datei einzulesen.
Möglichkeit 2: Alternativ kannst du CArchive weglassen und die Daten in einem selbstgewählten Format per CFile/CStdioFile oder fstream lesen und schreiben.
Ja es gibt Konsolenprojekte mit MFC-Unterstützung. Da hab ich das auch genau so schon gemacht und es hat auch funktioniert.
Wenn es so nicht geht, dann schrieb die Daten doch mit StdioFile, da werden die zeilenweise abgelegt.