2011-07-29 14 views
0

以下のコードでは、eofに達した後に新しい行を追加しようとしましたが、最後の行の最後にNULLが書き込まれました。誰も私を示唆することができます。デルファイでeofに達した後に新しい行を挿入する方法

次のように私はそれをコーディングしますが、ASCIIまたはANSIファイルへの書き込みをしていると仮定すると、
If (nImportPos > 0) then begin 
    nImportPos := FileWrite(fHandle, #13, length(#13)); 
    FileSeek(fhandle,0,2); 
end; 
+1

また、Windowsの行終了記号の#13#10を記述する必要があります。それはANSIまたはUnicodeファイルですか? –

答えて

0

if nImportPos>0 then begin 
    Assert(StringElementSize(sLineBreak)=1); 
    nImportPos := FileWrite(fHandle, sLineBreak[1], Length(sLineBreak)); 
end; 

注:

  1. StringElementSize主張は前提を正当化することです次の行では、sLineBreakには1バイトの文字要素が含まれています。 sLineBreakの定義には、明示的にAnsiStringを使用してください。あなたのDelphiがUnicode以前の場合、この行はコンパイルされず、削除することができます。
  2. sLineBreakは、ASCII/ANSIファイルに新しい行を書き込む正しい方法です。 Windowsでは、AnsiString(#13#10)、すなわちCR + LFペアと定義される。 Unixベースのプラットフォームでは、AnsiString(#10)、すなわち単一のLFと定義される。あなたがやっていることを論理的に表現し、コンパイラに実装をさせ​​るためにsLineBreakを使用してください。
  3. FileWrite()はファイルポインタをFileWrite()が書き込むバッファの最後に移動するので、FileSeek()の呼び出しは不要です。
関連する問題