AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

INI ASCII/ANSI oder Unicode ?

Ein Thema von Bernd Nowak · begonnen am 14. Apr 2007 · letzter Beitrag vom 17. Apr 2007
 
bigg
(Gast)

n/a Beiträge
 
#3

Re: INI ASCII/ANSI oder Unicode ?

  Alt 14. Apr 2007, 14:25
Wenn du nur überprüfen möchtest, ob die Datei eine "normale" Text-Datei im ANSI-Format ist, kannst du die untere Funktion verwenden. Wenn du zusätzlich noch herrausfinden möchtest, welches Format exakt vorliegt, könntest du einen Blick in die SynUnicode.pas werfen. Dort gibt es eine Klasse namens TWideStringList mit der man auch Unicode verarbeiten kann.


Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
// Konstanten:
////////////////////////////////////////////////////////////////////////////////

const FILE_OPEN_FAILED = -2;
const FILE_NOT_FOUND = -1;
const FILE_IS_NOT_BINARY = 0;
const FILE_IS_BINARY = 1;

////////////////////////////////////////////////////////////////////////////////
// Dateien: Gibt die Größe einer Datei zurück (auch über 4 GB)
////////////////////////////////////////////////////////////////////////////////

function GetFileSize(const FileName: String): Int64;
var FileHandle: Cardinal;
    Data: WIN32_FIND_DATA;
begin
  Result := -1;
  
  FileHandle := FindFirstFile(PChar(FileName), Data);
  try

    if FileHandle > 0 then
    begin
      Int64Rec(Result).Hi := Data.nFileSizeHigh;
      Int64Rec(Result).Lo := Data.nFileSizeLow;
    end;
    
  finally
    Windows.FindClose(FileHandle);
  end;
end;

////////////////////////////////////////////////////////////////////////////////
// Dateien: Prüft, ob eine Datei binäre Zeichen enthält
////////////////////////////////////////////////////////////////////////////////

function IsBinaryFile(const FileName: String): Integer;
const MAX_BUFFER = 4096; // Clustergröße
      ValidControlChars: Set of Byte = [9, 10, 12, 13]; // typische Textsteuerzeichen

var Buffer: Array[1..MAX_BUFFER] of Byte;
    FilePosition, FileSize: Int64;
    FileHandle, FileBlocks, LastBlock, BufferSize: Integer;
    i, j: Integer;

begin
  Result := FILE_IS_NOT_BINARY;
  FilePosition := 0;

  if FileExists(FileName) then
  begin
    FileHandle := FileOpen(FileName, fmOpenRead or fmShareDenyNone);

    try
      if FileHandle > 0 then
      begin
        FileSize := GetFileSize(FileName); // Dateigröße in Byte ermittln
        FileBlocks := FileSize div MAX_BUFFER; // Anzahl max. Blöcke
        LastBlock := FileSize mod MAX_BUFFER; // Größe des Rest-Block

        // Letzten Block hinzufügen
        if LastBlock <> 0 then Inc(FileBlocks);

        // Blöcke einlesen
        for i := 0 to FileBlocks -1 do
        begin
          if Result = FILE_IS_BINARY then Break;

          // Aktuelle Dateiposition anpassen
          FileSeek(FileHandle, FilePosition, 0);
          Inc(FilePosition, MAX_BUFFER);

          if FilePosition <= FileSize then
          BufferSize := MAX_BUFFER else
          BufferSize := LastBlock;

          FileRead(FileHandle, Buffer[1], BufferSize);

          for j := 1 to BufferSize do
          begin

            if Buffer[j] < 32 then
            begin
              if not (Buffer[j] in ValidControlChars) then
              begin
                Result := FILE_IS_BINARY;
                Break;
              end;
            end;

          end; {\for: j}
        end; {\for: i}

      end
      else
        Result := FILE_OPEN_FAILED;

    finally
      FileClose(FileHandle);
    end;

  end
  else
    Result := FILE_NOT_FOUND;
end;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz