CLI/C++ pliki binarne

0

Zgodnie z dokumentacją Microsoftu chciałem zobaczyć jak środowisko Visual C++ współpracuje z plikami. Pewien problem wystąpił gdy zabrałem się za działania na plikach binarnych.

private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) {
	FileStream^ myFile = File::Create("Date.txt");
	BinaryWriter^ file_Date = gcnew BinaryWriter(myFile,
		System::Text::Encoding::Default);
}

Podstawowy fragment do powstania takiego pliku. Kompiluje się jak najbardziej, bez żadnych warning-ów, problem jednak występuje przy uruchomieniu takiego fragmentu.
Po kliknięciu w przycisk wyskakują następujące komunikaty
Nieobsługiwany wyjatek
System.UnauthorizedAccessExceptio: Odmowa dostepu do sicezki C.......\Date.txt:
Problemu takiego nie ma przy operowaniu na plikach tekstowych. Idzie to jakoś obejść, bo nie znalazłem nigdzie informacji związanej z "nadawaniem" dostępu takim plikom. Ostatecznie zawsze mogą użyć metod z C i C++..

0

Podaj ścieżkę: @"%AppData%\Date.txt"

0

Ścieżka jest OK, tu ją akurat źle skopiowałem. Tak jak wspomniałem, tylko z plikami binarnymi jest problem. Podobną metodą pliki tekstowe powstają, czytają, zapisują bez problemu. Dla świętego spokoju będę używał sprawdzonych metod biblioteki fstream.

1
davout napisał(a):

Ścieżka jest OK, tu ją akurat źle skopiowałem. Tak jak wspomniałem, tylko z plikami binarnymi jest problem. Podobną metodą pliki tekstowe powstają, czytają, zapisują bez problemu. Dla świętego spokoju będę używał sprawdzonych metod biblioteki fstream.

Nie interpretacje, tylko pełny kod, kolego.

Nie działa, bo plik binarny nazwałeś ".txt" (wężykiem Jasiu, wężykiem) (a serio, to stawiam piwo, że piszesz w dziwny katalog, defaultowy)

Skakania z technologicznego kwiatka na kwiatek, zamiast rzetelnie rozwiązać problem, nie prowadzi do niczego trwałego / rozwijającego / etc.

ps. sprawdziłem podany kod, i nie zachodzą tam problemy, do których nas próbujesz przekonać. Na miarę gdzie skieruje ścieżkę jest OK albo w/w wyjątek (gdy do zakazanych katalogów)

0

@davout: możesz podać minimalny kod który działa i który nie działa? Brzmi jak ciekawy problem.

Rozumiem że ten kod nie działa:

private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) {
	FileStream^ myFile = File::Create("Date.txt");
	BinaryWriter^ file_Date = gcnew BinaryWriter(myFile,
		System::Text::Encoding::Default);
}

Możesz podać minimalny kod który działa?

0

Reprodukuje się w C# https://ideone.com/uoh0lj

0
msm napisał(a):

@davout: możesz podać minimalny kod który działa i który nie działa? Brzmi jak ciekawy problem.

Możesz podać minimalny kod który działa?

Działa w 100% na Widows (lub nie działa) zależnie jaką podać ścieżkę - ew licząc jak kolega na automagiczne zbudowanie ścieżki, co jest naiwne.
Kol @davout robi jakieś spiskowe teorie o błędach w bibliotece standardowej, co jest nieprawdą - nie zapewniając stabilnego kontekstu wywołania.

MarekR22 napisał(a):

Reprodukuje się w C# https://ideone.com/uoh0lj

a) Sz.Kol nie podawał, że linux (ani nie podawał, ze Widows)
b) użył C++ CLI (najstarsi Indianie nie wiedzą dlaczego)
c) to jest event z jakiegośc większego GUI

0

Gryzło się ponieważ jak to wspomniał ZrobieDobrze został użyty plik tekstowy. Wystarczyło zmienić rozszerzenie i śmiga jak powinno. Na swoją obronę zapowiem, że przykład książkowy (odrobine zmodyfikowany) autora wielu podręczników od środowisk C++, który użył rozszerzenia .txt , a ja jedynie przepisałem. Temat wyjaśniony, do zamknięcia.

0
davout napisał(a):

Gryzło się ponieważ jak to wspomniał ZrobieDobrze został użyty plik tekstowy. Wystarczyło zmienić rozszerzenie i śmiga jak powinno. Na swoją obronę zapowiem, że przykład książkowy (odrobine zmodyfikowany) autora wielu podręczników od środowisk C++, który użył rozszerzenia .txt , a ja jedynie przepisałem. Temat wyjaśniony, do zamknięcia.

To nie może być prawdą, a ode mnie to był żart.. pewnie masz parzystą ilość błędów.
I ujawnia się w innych scenariuszu użycia, np gdy po klikaniu zmienia się ścieżka. testując trafiasz na to, lub nie.

0
ZrobieDobrze napisał(a):
davout napisał(a):

Gryzło się ponieważ jak to wspomniał ZrobieDobrze został użyty plik tekstowy. Wystarczyło zmienić rozszerzenie i śmiga jak powinno. Na swoją obronę zapowiem, że przykład książkowy (odrobine zmodyfikowany) autora wielu podręczników od środowisk C++, który użył rozszerzenia .txt , a ja jedynie przepisałem. Temat wyjaśniony, do zamknięcia.

To nie może być prawdą, a ode mnie to był żart.. pewnie masz parzystą ilość błędów.

Już to w nie wnikam. reasumując - Date.txt wywalało powyższe błędy, z kolei użycie nowej nazwy/roszerzenia np Date.foo tworzy plik binarny i go wypełnia zadanymi wartościami.Reszta już chyba bez znaczenia. Działać, działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1