Skocz do zawartości

Zapis do pliku txt w Visual C++


Arekadiusz

Rekomendowane odpowiedzi

Witam!

Postanowiłem nie dawno spróbować Visual C++ 2010 Express, gdyż przeczytałem że jest to wersja darmowa nawet do zastosowań komercyjnych. No ale do rzeczy.

Wczoraj zacząłem pisać programik, który zapisuje tekst i liczby do pliku linia po linii. Mój kod wygląda tak:

fstream plik;
plik.open( "C:/plik.txt", ios::in | ios::out );
if( plik.good() == true )
{
plik << pole1->Text;
plik << "\n";
plik << pole2->Text;
plik << "\n";
plik << pole3->Text;
plik.close();
ShowMessage("Gotowe!");
} else ShowMessage("Nie można utworzyć pliku!");

 

W poprzednim środowisku ten kod mi działał a w Visualu C++ pomimo różnych kombinacji nie chce. Zarzuca mi błąd:

Error 1 error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'System::String ^' (or there is no acceptable conversion)

Próbowałem najpierw pobrać tekst z pól do zmiennych 'System::String ^' ale wtedy nie mam pojęcia jak to zapisać. Robię tak:

System::String^ zm1=pole1->Text;
System::String^ zm2=pole2->Text;
System::String^ zm3=pole3->Text;
fstream plik;
plik.open( "E:/pliczek.txt", ios::in | ios::out );
if( plik.good() == true )
{
plik << zm1;
plik << "\n";
plik << zm2;
plik << "\n";
plik << zm3;
plik.close();
ShowMessage("Gotowe!");
} else ShowMessage("Nie można utworzyć pliku!");

I wyświetla się ten sam błąd co powyżej :(

Byłbym bardzo wdzięczny jakby ktoś mi powiedział co robię źle i jak to poprawnie zapisać.

Odnośnik do komentarza
Udostępnij na innych stronach

Powyższy kod to nie C++, a C++/CLI. Jak zmienisz na std::string to będziesz musiał konwertować System::String z .NET'owego TextBoxa między managed a unmanaged code, bodajże przy użyciu klasy Marshal (http://msdn.microsoft.com/en-us/library/sy...es.marshal.aspx). Jeśli chcesz pisać w .NET to C#. C++/CLI to tylko wtedy, kiedy musisz mieszać kod zarządzany z niezarządzanym.

Odnośnik do komentarza
Udostępnij na innych stronach

Zrobiłem na razie coś takiego przy pomocy tego linku i program ładnie się kompiluje tylko że plik się nie tworzy... :(

Mój kod:

System::String^ zm1=pole1->Text;
System::String^ zm2=pole2->Text;
System::String^ zm3=pole3->Text;
std::string zm4=msclr::interop::marshal_as< std::string >( zm1);
std::string zm5=msclr::interop::marshal_as< std::string >( zm2);
std::string zm6=msclr::interop::marshal_as< std::string >( zm3);

fstream plik;
plik.open( "E:/plik.txt", ios::in | ios::out );
if( plik.good() == true )
{
plik << zm4;
plik << "\n";
plik << zm5;
plik << "\n";
plik << zm6;
plik.close();
}

Odnośnik do komentarza
Udostępnij na innych stronach

Spoko! Chyba nawet już rozwiązałem swój problem ;)

Funkcja StreamWriter i StreamReader przyszła mi z pomocą i jak na razie jest dobrze. Plik się pięknie tworzy, jest odczyt linia po linii co jest mi potrzebne więc myślę że będzie ok. Jakby coś to będę jeszczę pisał.

Utermiko, bardzo dziękuję za pomoc :thumbsup:

Odnośnik do komentarza
Udostępnij na innych stronach

No i mam kolejny problem. Nie działa mi w Visual C++ polecenie fileExists. Błąd to: error C3861: 'fileExists': identifier not found. Ktoś wie o co chodzi i co zrobić?

I to samo jest z MessageBox: MessageBox(NULL, "Treść", "Okienko", MB_ICONERROR);. Pokazuje się błąd error C2872: 'MessageBox' : ambiguous symbol ale udało mi się zastąpić to MessageBox::Show.

To występuje znowu tylko w Visualu :( Nie wiem czy to znowu coś z tym .NET?

 

EDIT: Już znalazłem... musi być File::Exists(sciezka). Ale czy każde polecenie w C++ musi różnić się w Visualu??

Odnośnik do komentarza
Udostępnij na innych stronach

Chciałem napisać tak jak w WinApi czyli fileExists(sciezka) to zasypał mnie błędami że takie coś nie istnieje (patrz mój poprzedni post)... :(

I znów mam problem bo chciałbym zmienić wartość label które znajduje się na formie1 po kliknięciu na przycisk na formie2. Żeby to zrobić dołączyłem plik nagłówkowy "Form1.h" do formy2 a on mi na to: error C1014: too many include files : depth = 1024. Nie wiem czy to ma jakieś znaczenie ale do formy1 dołączam też plik "Form2.h" i tu nie ma problemu ale z tego co mi wiadomo nie działa to w dwie strony.

Odnośnik do komentarza
Udostępnij na innych stronach

Ale designer jest tylko do .NET. Jeśli chcesz przy tym zostać to poczytaj o C++/CLI, jednak nie radzę bo używanie .NET w C++ jest strasznie przekombinowane.

Ewentualnie zainteresuj się innymi bibliotekami GUI typu Qt, wxWidgets.

 

Co do dostępu z formy do formy, to przekaż referencję formy pierwszej do formy drugiej. Np. w konstruktorze drugiej formy przyjmujesz formę pierwszą i w formie pierwszej przekazujesz "this" do konstruktora formy drugiej.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 tygodnie później...

Kodze w visualu od kilku lat, i imo jest najlepszym ide, ponieważ między innymi posiada sprawdzanie składni w czasie rzeczywistym( nigdy więcej nie zapomnisz ; na końcu lini ;P ) dość fajny i rozbudowany debuger, i niewiem o żadnych specjalnych nagłówkach?

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...