String^ und Operator
-
hi,
ich möchte den inhalt einer txtbox per buttonklick in eine txt datei speichernstd::ofstream datei("C:\\txt.txt"); String^ str = textBox1->Text; datei << str; datei.close();
so müsste es eigentlich gehen aber da kommt immer diese fehlermelung:
error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'System::String ^' (or there is no acceptable conversion)hat einer ne idee wie ich den fehler beheben kann?
MfG
-
Ich würde sagen, du sollten den Datentyp ändern. Denn was ist eigentlich String^ für eine Klasse? Reicht denn nicht auch String? Oder du fügst den Operator << in die Klasse String^ hinzu.
ps: Ich bin Anfänger, bin erst bei dem Abschnitt Pointer.
-
Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Das ist unsinn was Du da treibst. Verwende einen std::string oder System::IO::File zum schreiben der Daten.
-
Du bringst hier STL und .NET durcheinander... das ist nicht gut und verwirrt Dich nur.
Verwende entweder das eine oder das andere...
-
Du bringst hier STL und .NET durcheinander
was meinst du damit
was ich will is einfach nur den inhalt einer text box auslesen
bei google hab ich gefunden:String^ str = textBox1->Text;
und strings in eine datei schreiben hab ich immer mit ofstream gemacht
naja sry dass ich falsh gepostet hab
dachte ich poste mal hier weil ich mit visual c++ arbeite
kann mich bitte jemand mit meinem code verbessern
danke
Mfg
-
Vergiss alles was Du bisher über C++/STL gelernt hast...
Du machst gerade eine Windows-Forms Applikaton und das ist .NET.
Da schreibt man in Dateien mittels "StreamWriter":Siehe: How to: Write Text to a File
http://msdn2.microsoft.com/en-us/library/6ka1wd3w.aspx
=>System::IO::StreamWriter sw("C:\\txt.txt"); sw.Write(textBox1->Text); sw.Close();
-
ok super vielen dank
jetzt gehtsedit: es geht doch nciht wenn ichs in mein programm einbaue
LPSTR Buffer; Buffer = LoadFile2Str("html.html"); // ich denk ma die ganze fkt brauch ich hier nicht zu posten std::string s1 = Buffer; s1.replace(s1.find("(_ID"),4,textBox1->Text); std::string datei; datei = s1; System::IO::StreamWriter sw("C:\\html.html"); sw.Write(datei); //error : string kann nicht in wchar_t convertiert werden sw.Close();
MfG
-
vlt solltest du dich erstmal mit den grundlagen von c++/cli beschäftigen, bevor du es verwendest. bei .net schreibst du kein std::wstring sondern ein System::String ^. also: sw.Write(gcnew System::String(datei.c_str()));
-
Nicht so:
System::IO::StreamWriter sw("C:\\html.html"); sw.Write(datei); //error : string kann nicht in wchar_t convertiert werden sw.Close();
sondern so gehts besser:
System::IO::StreamWriter sw = gcnew System::IO::StreamReader("C:\\html.html"); sw->Write(datei); //error : string kann nicht in wchar_t convertiert werden sw->Close();
Und die Sache mit der w_char nach String wandlung (oder anders rum) da steht vom Jochen schon was in der FAQ C++/CLI
-
System::IO::StreamWriter ^ sw = gcnew System::IO::StreamReader("C:\\html.html"); sw->Write(datei); //error : string kann nicht in wchar_t convertiert werden sw->Close();
Btw.: Natürlich kann man auch konvertieren, aber wieso sollte man das ? Ich sehe in den gezeigten Quellcodestücken keine Notwendigkeit. System::String erfüllt doch alles was der OP braucht.
-
Wie gesagt... lass die Finger weg von der STL oder lass die Finger weg von .NET!!!!
Beides zusammen brigt Dich zur Verzweiflung und macht auch keinen Sinn!Liest bitte die Datei mittels "StreamReader" ein... und versende "String^" zu speichern von Strings...
-
hi,
das hat mir schonmal viel geholfen dankehab den code so verbessert :
StreamReader^ sr = gcnew StreamReader( "C:\\html.html" ); String^ datei = sr->ReadLine(); datei.replace(datei.find("(_ID"),4,textBox1->Text); StreamWriter sw("C:\\html.html"); sw.Write(datei); sw.Close();
kommen aber noch 2 kleine fehler :
left of '.replace' must have class/struct/union
left of '.find' must have class/struct/unionich hoff das hab ich bald mir eurer hilfe auch gefixst
ps: ich werd mir bald den unterschied zwischen stl und .net genauer angucken
-
Schau Dir erst mal die Grundlagen an , in Deinem speziellen Fall: Zeiger (datei->)
-
.replace => ->Replace
.find => ->IndexOf
-
hmn das hab ich gerade bei msdn auch gelesen und verbessert
so lande ich wieder beim alten problemdatei->Replace(datei->IndexOf("(_ID"),L"textBox1->Text");
'System::String ^System::String::Replace(wchar_t,wchar_t)' : cannot convert parameter 2 from 'const wchar_t [15]' to 'wchar_t'
sry dass ich euch hier nerve
hab mir auch die FAQs durchgelesen und nicht viel verstanden
-
datei.replace(datei.find("(_ID"),4,textBox1->Text);
L"textBox1->Text");
-
Knuddlbaer schrieb:
datei.replace(datei.find("(_ID"),4,textBox1->Text);
L"textBox1->Text");
is doch ? oder was meinst du du?
-
Frage:
String ^ a = "Textbox1->Text";
String ^ b = Textbox1->Text;Was steht in a und was steht in b ?
-
hi,
a = Textbox1->Text
b = inhalt von Textbox1
und jetzt back to my problem