線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1132
推到 Plurk!
推到 Facebook!

如何在去除檔尾的 0A 後, 再在檔尾加上其它字元

答題得分者是:Miles
saam
初階會員


發表:61
回覆:75
積分:27
註冊:2003-03-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-30 14:13:52 IP:211.75.xxx.xxx 未訂閱
請問各位大大: 我要如何去除檔尾的 "0A" 後, 再在檔尾加上其它字元.
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-30 17:49:04 IP:220.135.xxx.xxx 未訂閱
Hi saam 你好, 試試這個:
procedure TForm1.Button2Click(Sender: TObject);
var SurStream : TFileStream;
    DesStream : TMemoryStream;
    Str : String;
begin
   SurStream := TFileStream.Create('C:\UltraEdit.txt', fmOpenRead or fmShareDenyRead); //開檔
   SetLength(Str, SurStream.Size); //設定字串長度
   SurStream.ReadBuffer(Pointer(str)^, SurStream.Size); //讀檔案內容
   if str[SurStream.Size] = #10 then     //若末碼 0a 則消掉
      SetLength(Str, SurStream.Size-1);
   Str := Str   'abcdefghtkels'; //加入自己的字串
   FreeAndNil(SurStream);
   DesStream := TMemoryStream.Create;
   DesStream.WriteBuffer(Pointer(Str)^, Length(Str));
   DesStream.SaveToFile('C:\UltraEdit.txt'); //寫檔
   FreeAndNil(DesStream);
end;
我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
saam
初階會員


發表:61
回覆:75
積分:27
註冊:2003-03-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-30 22:42:34 IP:61.62.xxx.xxx 未訂閱
謝謝Miles大大的指導: 可以了呢 ^^ 請問如果檔案很大的話,這個方法會不會有問題呢?
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-30 23:58:25 IP:61.31.xxx.xxx 未訂閱
Hi saam 你好, 你說到了重點, 這要看Delphi的String可以容納多大的空間, 我記得好像是2G還是4G有點忘了, 程式我再修改一下, 如下
procedure TForm1.Button1Click(Sender: TObject);
var SurStream : TFileStream;
    //DesStream : TMemoryStream;
    Str : String;
begin
   SurStream := TFileStream.Create('C:\a.txt', fmOpenReadWrite or fmShareDenyRead); //開檔
   SetLength(Str, SurStream.Size); //設定字串長度
   SurStream.ReadBuffer(Pointer(str)^, SurStream.Size); //讀檔案內容
   if str[SurStream.Size] = #10 then     //若末碼 0a 則消掉
      SetLength(Str, SurStream.Size-1);
   Str := Str   'abcdefghtkels'; //加入自己的字串       SurStream.WriteBuffer(str[1], Length(Str)); //寫檔案內容
   FreeAndNil(SurStream);
  { DesStream := TMemoryStream.Create;
   DesStream.WriteBuffer(Pointer(Str)^, Length(Str));
   DesStream.SaveToFile('C:\UltraEdit.txt'); //寫檔
   FreeAndNil(DesStream);    }
end;
我不是高手, 高手是正在銀幕前微笑的人. 發表人 - miles 於 2004/10/01 00:00:02
------


我不是高手, 高手是正在銀幕前微笑的人.
saam
初階會員


發表:61
回覆:75
積分:27
註冊:2003-03-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-01 00:55:15 IP:61.62.xxx.xxx 未訂閱
謝謝Miles大大 但改了以後 SurStream.WriteBuffer(str[1], Length(Str)); //寫檔案內容 這行出現錯誤~ 改成 SurStream.WriteBuffer(Pointer(Str)^, Length(Str)); 後也一樣呢~
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-01 02:14:06 IP:61.31.xxx.xxx 未訂閱
請問錯誤訊息是什麼? 先設中斷點看Str是不是空字串 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
saam
初階會員


發表:61
回覆:75
積分:27
註冊:2003-03-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-01 12:20:41 IP:211.75.xxx.xxx 未訂閱
謝謝Miles大大: 出現的錯誤如下~ Project 程式名 raised exception class EWriteError with message 'Stream write error' .Process stopped. Use Step or Run to continue.
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-10-01 12:39:39 IP:202.62.xxx.xxx 未訂閱
您好﹗    試試這個方法﹕
Var
  F1 : File Of Byte;
  F2 : TextFile;
  Size : LongInt;
  Str : String;
begin
  Str := '追加內容';
  AssignFile(F1, 'D:\Xin.txt');
  Reset(F1);
  Size := FileSize(F1);
  Seek(F1, Size-2);
  Truncate(F1);
  CloseFile(F1);      AssignFile(F2, 'D:\Xin.txt');
  Append(F2);
  WriteLn(F2, Str);
  CloseFile(F2);
end;
========================= 大病初愈﹐休養調整中... =========================
------
忻晟
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-10-01 14:03:19 IP:220.135.xxx.xxx 未訂閱
saam 你好, 我在這邊測試都OK, 如果不行的話先用第一種方式吧< >< > 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
系統時間:2024-06-26 17:05:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!