Skocz do zawartości

Zapis do pliku txt w Visual C++


Rekomendowane odpowiedzi

Opublikowano

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ć.

Opublikowano

Nie na razie nie chcę przerzucać się na C#...

Więc co mam zrobić w obecnej sytuacji? Mam System::String^ i jak zamienić to tak, abym mógł zapisać tekst z pola do pliku?

Opublikowano

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();
}

Opublikowano

Zrobiłem to i po mimo tego pliku nie ma.

Tylko że nie wiem co to miało by dać bo projekt mam w folderze na pulpicie (dysk C) a plik ma się stworzyć na dysku E więc...?

Opublikowano

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:

Opublikowano

Taka mała poprawka na przyszłość: StreamWriter i StreamReader to klasy. W ogóle cała biblioteka .NET to zbiór klas (tak, nawet zwykłe zmienne typu int (Int32)).

Opublikowano

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??

Opublikowano

File::Exists to metoda klasy File z .NET. fileExists to prawdopodobnie z WinAPI.

To nie jest wina Visuala, tylko to, że zamiast pisać w C++ to piszesz w C++/CLI (wersji C++ przerobionej aby można było korzystać z .NET).

Opublikowano

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.

Opublikowano

Tylko że jeżeli dam Empty Project to nie będę miał Designera ani nic tylko wszystko trzeba ręcznie pisać :D Ja wolę sobie ustawiać gotowe elementy i mieć z głowy.

A co z tym dostępem z formy do formy?

Opublikowano

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.

  • 4 tygodnie później...
Opublikowano

Visual wymaga dodania specjalnych nagłówków, co nie ma miejsca w przypadku innych kompilatorów. Jednakże jest jednym z lepszych tego typu, szkoda jednak, że nie da się go zintegrować z żadnym GUI.

 

Polecam od siebie CodeLite :)

Opublikowano

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?

Opublikowano

Visual 2010 w którym również od czasu do czasu zdarza mi się coś napisać, wymaga dołączania w includach: "stdafx.h"

 

Podczas, gdy inne kompilatory tegoż nie wymagają.

Opublikowano

Upewnij się, że wybierasz C++ Win32 (nie CLR) i jak tworzysz projekt to nie klikaj od razu "Finish" tylko daj "Next", zaznacz "Empty project" i dopiero "Finish". Potem prawym na "Source files" > "Add" i dodajesz sobie powiedzmy "main.cpp".

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ę...