2008-10-01 5 views
6

어떤 이유로 든 내 클라이언트 시스템의 * .UDL 파일은 이전에 ANSI 파일로 저장되었으므로 더 이상 호환되지 않습니다. 더 이상 호환되지 않습니다. 예상 UNICODE 파일 형식. 최종 결과는 "파일이 유효한 복합 파일이 아닙니다"라는 오류 대화 상자입니다.Delphi를 사용하여 ANSI 파일 열기 및 유니 코드 파일 저장

이러한 파일을 프로그래밍 방식으로 열고 유니 코드 파일로 저장하는 가장 쉬운 방법은 무엇입니까? 메모장에서 각 파일을 열고 같은 파일로 저장하지만 저장 대화 상자의 인코딩 섹션에서 선택된 "유니 코드"를 사용하여이 작업을 수행 할 수 있음을 알고 있지만 프로그램에서 지원을 줄이기 위해이 작업을 수행해야합니다. 전화.

이 문제는 매우 쉽게 복제 할 수 있습니다. 디렉토리에 * .txt 파일을 만들고 이름을 * .UDL로 변경 한 다음 Microsoft 편집기를 사용하여 편집하십시오. 그런 다음 메모장에서 열고 ANSI로 인코딩 된 파일로 파일로 저장하십시오. udl 편집기에서 udl을 열면 잘못된 것으로 표시됩니다. 그런 다음 메모장을 사용하여 유니 코드로 인코딩 된 파일로 저장하면 다시 열립니다.

+0

어떤 버전의 델파이가 사용됩니까? –

+0

Delphi 버전 2006 또는 2009. – skamradt

답변

7

이것은 내 TGpTextFile 단위로 수행하는 것은 매우 간단합니다. 나는 짧은 샘플을 모아 여기에 올릴 것이다.

새로운 Delphi 2009에서도 매우 간단해야합니다. 아마도 사용하고 계신 겁니까?

편집 : 이것은 2009 년 이전 델파이에서 내 물건을 사용하여 수행 할 수있는 방법입니다.

var 
    strAnsi : TGpTextFile; 
    strUnicode: TGpTextFile; 
begin 
    strAnsi := TGpTextFile.Create('c:\0\test.udl'); 
    try 
    strAnsi.Reset; // you can also specify non-default 8-bit codepage here 
    strUnicode := TGpTextFile.Create('c:\0\test-out.udl'); 
    try 
     strUnicode.Rewrite([cfUnicode]); 
     while not strAnsi.Eof do 
     strUnicode.Writeln(strAnsi.Readln); 
    finally FreeAndNil(strUnicode); end; 
    finally FreeAndNil(strAnsi); end; 
end; 

위의 코드 부분은 공개 도메인에 속합니다. 어쨌든 당신이 좋아하는 그것을 사용하십시오.

9

델파이 2009를 사용하면 작동하는 것처럼 보이는 다음 코드를 만들 수 있었지만이 변환을 수행하는 올바른 방법입니까?

var 
    sl : TStrings; 
    FileName : string; 
begin 
    FileName := fServerDir+'configuration\hdconfig4.udl'; 
    sl := TStringList.Create; 
    try 
    sl.LoadFromFile(FileName, TEncoding.Default); 
    sl.SaveToFile(FileName, TEncoding.Unicode); 
    finally 
    sl.Free; 
    end; 
end; 
+0

tStrings.Create에 대한 추상 오류가 없습니다 ??? –

+0

그래, TStringList 훨씬 더 있어야합니다 :) – gabr

+0

이외의 코드는 괜찮습니다 (그리고 그것도 작동, 그냥 체크). – gabr