Fórum O que acontece com a String? #300192

21/10/2005

0

Ao ler um arquivo de texto qualquer (seja de 2 kb a 30 MB), em uma TStringList, ao salva-lo em uma variavel widestring com o método .Text sempre desaparecem alguns caracteres do final do arquivo. Não descobri uma lógica nem um padrão para isso, em um teste que fiz, um arquivo de 2 kb chegou a desaparecer mais caracteres que um de 16 mb.
Alguem sabe o motivo? Segue abaixo o código utilizado...

var
teste: TStringList;
teste2: widestring;
begin

teste := TStringList.Create;
teste.LoadFromFile(´teste.txt´);

teste2 := teste.Text;

AssignFile(f, ´teste2.txt´);
Rewrite(f);
write(f, teste2);

end;

Rândallo Prux


Randallo

Randallo

Responder

Posts

21/10/2005

Nildo

E com String normal? Ocorre o mesmo erro?


Responder

Gostei + 0

21/10/2005

Massuda

Acho que o Write não sabe lidar com WideStrings (você está trabalhando com Unicode?). Não consegui compilar seu exemplo, mesmo declarando F como sendo File ou Text.


Responder

Gostei + 0

21/10/2005

Randallo

Eu vou precisar salvar em uma váriável o conteúdo de uma StringList bem extensa.
Eu estava fazendo o teste acima para verificar o comportamento do método .Text de uma StringList, pois o mesmo retorna uma string e não sei até que tamanho ele suporta.

Realmente acho que o problema do desaparecimento dos caracteres no fim do arquivo salvo é do write, pois ao imprimir na tela o conteúdo da var teste2 ele apresenta corretamente.

A questão é a seguinte: o metodo .Text irá funcionar se a StringList tiver até o tamanho máximo de uma widestring (~2^30 characters / 4 bytes to 2GB)?


Responder

Gostei + 0

21/10/2005

Nildo

Para isso eu não aconselho usar métodos como carregar um arquivo desse tamanho em uma StringList. Primeiro que a memória do seu aplicativo vai subir muito, e pode estourar o SO. Eu usaria métodos mais eficientes como leitura dinâmica (ler somente o que vai aparecer na tela), usar APIs do windows para manuseio do arquivo, etc


Responder

Gostei + 0

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

Aceitar