Identificar Conteúdo do Arquivo

Delphi

07/05/2005

Srs.,

Estou precisando implementar um programa de compressão de dados, no entanto preciso encontrar ou criar (caso não encontre) um algoritmo que me permita analisar o conteúdo do arquivo (e não a sua extensão) para saber se o mesmo refere-se a um arquivo binário ou que contenha apenas texto puro.

Não é apenas identificar se um arquivo possui caracteres especiais ou não, visto que arquivos binários e texto podem possuir tais caracteres. Enfim, preciso de um algoritmo que me indique, a partir do seu conteúdo lido, se o arquivo é binário ou possui apenas texto. Lembrando que apenas analisando pela extensão não serve, pois como usuário pode fornecer ao arquivo a extensão que quiser.

Qualquer orientação que possa me ajudar a resolver este problema será bem vinda e grata!

[]s
Rubem Rocha
Manaus, AM


Khundalini

Khundalini

Curtidas 0

Respostas

Raserafim

Raserafim

07/05/2005

minha resposta não vai ser muito precisa, mas como vc disse que qualquer orientação é bem vinda...:
os arquivos executáveis tem um formato de cabeçalho próprio, aliás, cada formato de arquivo tem o seu próprio formato de cabeçalho. um arquivo totalmente texto não tem nenhum tipo de cabeçalho. o seu passo inicial deverá saber como é o formato do cabeçalho, assim vc pode carregar o arquivo e ler a sua primeira linha (onde acho que está o cabeçalho) e identificar o padrão, deduzindo assim o tipo de arquivo.
Uma certa vez quando procurava informações sobre assembler, acabei entrando em um site (mas encontrei outros mais) que explicava sobre o cabeçalho do arquivo executável. dentro destes sites acabei encontrando um site que tem esse cabeçalho de vários formatos de arquivos, e encontrei tb um outro site (parece que oficial) onde tem cadastrado todas as extenções que são registradas, informando de qual programa pertence (pode ser que tb tenha o formato do arquivo).
não resolvi o problema mas acho que dei um dos caminhos pra vc tentar desenrrolar.


GOSTEI 0
Khundalini

Khundalini

07/05/2005

Seu argumento foi muito esclarecedor. Vou trabalhar em cima disso. Grato.

[]s
Rubem Rocha
Manaus, AM


GOSTEI 0
Massuda

Massuda

07/05/2005

...um algoritmo que me permita analisar o conteúdo do arquivo (e não a sua extensão) para saber se o mesmo refere-se a um arquivo binário ou que contenha apenas texto puro.
Acho que a única forma segura de fazer isso, considerando que você pode ter que processar qualquer tipo de arquivo, é abrir o arquivo assumindo que ele é binário e verificar se cada byte dentro dele se enquadra na sua definição de ´texto puro´; se isso acontecer (todos os bytes lidos são ´texto puro´), então o arquivo é ´texto puro´.


GOSTEI 0
Ltres

Ltres

07/05/2005

Olha naum sei se ajuda.. mas fiz um pequeno teste aqui.
Minha ideia era compar o nº de bytes lidos por dois modos de leitura de arquivo.. pra ver se fechavam..
O modo mais simples de abrir texto q conheco é o TStrings... q na minha ideia so abre texto corretamente. E o segundo é o AssignFile... q acredito q abra qualquer tipo..
Pois bem .. faça o teste q vc vai ver.. o TStrings so abre corretamente texto pra mim... ja o assignfile abre qualquer um.. porem qdo eu uso a função FileSize pra pegar o tamnho do arquivo, só os q naum sao texto mostram valor.. no texto o filesize retorna zero..

procedure TForm1.FormCreate(Sender: TObject);
var
  teste: TStrings;
  F: TextFile;
const
  NomeArq: string = ´C:\tre.txt´;
begin
  teste := TStringList.Create;
  teste.LoadFromFile(NomeArq);
  Memo1.Lines.Text := teste.Text;
  teste.Free;

  AssignFile(f, NomeArq);
  Reset(F);
  Memo1.Lines.Append(´TamArq:´ + IntToStr(filesize(f)) + ´ Lidos: ´ + IntToStr(Length(Memo1.Text)));
  CloseFile(F);
end;


fiquei meio confuso.. mas acho q por ai da pra tira alguma coisa..
espero ter ajudado.. ou ao menos ter dado uma ideia


GOSTEI 0
POSTAR