Dúvida - Arquivo de Texto

16/05/2007

0

Olá. Eu sou meio novo com c++ e estou tentando gravar uns valores num arquivo de texto e depois ler esses valores. O problema é que, quando uso a função Seek ou altero diretamente a Position do FileStream, os valores ficam formatados de forma errada no arquivo e depois não consigo le-los novamente. aqui vai um exemplo do que estou tentando fazer:

String^ _string = ´´;
UnicodeEncoding^ uniE = gcnew UnicodeEncoding;
array<Byte>^ cinco = gcnew array<Byte>(5);
unsigned short valor1=10,valor2=20;

FileStream^ arq = File::Open(´Salvos/teste.txt´,FileMode::Create,FileAccess::ReadWrite);

arq->Seek(0,SeekOrigin::Begin);
_string = String::Format(´´,valor1.ToString());
arq->Write(uniE->GetBytes(_string),0,uniE->GetByteCount(_string));
arq->Close();

Se eu parar por aqui o arquivo é criado fica escrito o valor ´10´ logo no primeiro espaço da primeira linha. Só que o que eu preciso é fazer um tipo de banco de dados. Como não sei trabalhar com banco de dados estou tentando fazer com arquivos de texto. Antes eu conseguia fazer isso mas na nova versão (2005) do C++ não consigo mais. Queria colocar vários valores em uma linha a cada 5 espaços (por exemplo) e depois ler eles. Eu já tentei continuar mas não consigo colocar o valor a cada 5 espaços e quando abro o arquivo de texto criado os valores estão espaçados (em vez de ´10´ está escrito ´1 0´). O que tenho que mudar? aqui segue a continuação do código de cima (em vez de ´Close()´ o arquivo):

arq->Seek(1024,SeekOrigin::Begin); //cada linah tem 1024 bytes
_string = String::Format(´´,valor2.ToString());
arq->Write(uniE->GetBytes(_string),0,uniE->GetByteCount(_string));
arq->Close();

e depois queria ler esses dados. Estou lendo eles dessa forma:

unsigned short x=0;y=0;

FileStream^ arq = File::Open(´Salvos/teste.txt´,FileMode::Open,FileAccess::ReadWrite);

arq->Seek(0,SeekOrigin::Begin);
arq->Read(cinco,0,5);
_string = gcnew String(uniE->GetChars(cinco,0,5));
x = Convert::ToUInt16(_string);

arq->Seek(1024,SeekOrigin::Begin);
arq->Read(cinco,0,5);
_string = gcnew String(uniE->GetChars(cinco,0,5));
y = Convert::ToUInt16(_string);

Alguem pode me ajudar?! não consigo fazer isso funcionar direito de jeito nenhum.
Agradeço a atenção.
Abraços.


Mau Av

Mau Av

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar