[C++/CLI] Problem z odczytem plików

0

Hello World! ;-P Musze zrobić programik który wysyła pliki przez neta. Odczytuje pliki w sposób pokazany niżej... jednak problem pojawia się przy odczycie plików .dat i nie tylko... generalnie jak odczytuje jakieś proste pliki typy txt, ini itp. to wszystko gra ale pliki gdzie po otwarciu ich w notatniku wyswietlane są krzaczki to już nie czyta, tzn zacina sie w jakimś momencie (myślę ze zwykle tym samym). Nie wiem czy dobrze wnioskuje ale problemem może być jakieś kodowanie znaków czy coś w ten deseń... probowałem już wielu kombinacji (odczytywanie wchar_t zamiast unsigned charów itp., używanie System::ASCII) ale raczej nic nie pomogło... Nie zna ktoś jakiegoś metody do odczytu wszelkiego rodzaju plików?? Dzięki za odp. :-)

                        FileStream^ f = gcnew FileStream(GetFile(),System::IO::FileMode::Open);
			BinaryReader^ fr = gcnew BinaryReader(f);
			
			//wchar_t data;
			unsigned char data;
			try
			{
				while (fr->PeekChar() != -1)
				{
					//data = System::Text::Encoding::ASCII->GetBytes(fr->ReadChars(1));
					data = fr->ReadByte(); //ReadChar();
					w->Write(data); //w to binary writer do Network Streamu
				}
				//w->Write(System::Text::Encoding::ASCII->GetBytes("\!"));
				w->Write(unsigned char(-1)); //tutaj chce wyslać jakiś "specjalny" znak kończący wysyłanie danego pliku
			catch(...)
			{
				MessageBox::Show(L"aaaaaaaaant",L"Er",MessageBoxButtons::OK,MessageBoxIcon::Exclamation);
			}
			finally
			{
				fr->Close();
				f->Close();
			}
0

Problem rozwiązał się sam... chodziło o funkcję PeakChar(), która to zawieszała się przy odczycie niektórych znaków... może ktoś wie dlaczego?
Obecna wersja:

                        FileInfo^ fi = gcnew FileInfo(GetFile());
			int x = int(fi->Length);
			
			w->Write(x); //w - binary writer do network streama

			FileStream^ f = fi->Open(System::IO::FileMode::Open);
			BinaryReader^ fr = gcnew BinaryReader(f);

			unsigned char data;
			try
			{
				while (x--)
				{
					data = fr->ReadByte();
					w->Write(data); //w - binary writer do network streama
					pb->PerformStep();
				}
			}
			//tutaj duzo catch'ow
			catch(...)
			{
				MessageBox::Show(L"aaaaaaaaant",L"Er",MessageBoxButtons::OK,MessageBoxIcon::Exclamation);
			}
			finally
			{
				fr->Close();
				f->Close();
			}
0

@ google.pl
+msdn +peekchar
pierwszy link = http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=127647&SiteID=1
mozliwe problemy: nie ten typ strumienia, nie to kodowanie znakow na strumieniu itp
zwroc uwage ze jest to peek CHAR a nie peek BYTE, tak wiec kodowanie tez ma znaczenie.. zrezsta z tego co pisza na tym forum, to peekchar jest w ogole jakis walniety

jesli chcesz przerzucac dane bajt-po-bajcie, to po co Ci binaryreader? sam filestream od razu ma metode readByte przeciez. bezposrednio z fs'em mozesz tez zrobic petle while(fs->position != fs->length) zamiast opierac sie na watpliwym peekchar

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