西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴(lài)的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開(kāi)發(fā)Delphi → Delphi文件讀寫(xiě)操作常用的方法

Delphi文件讀寫(xiě)操作常用的方法

前往專(zhuān)題相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:百度搜索時(shí)間:2012/8/22 11:11:25字體大小:A-A+

作者:西西點(diǎn)擊:759次評(píng)論:0次標(biāo)簽: Delphi7

Delphi77.0 Build 8.1企業(yè)版龍卷風(fēng)集成Update1
  • 類(lèi)型:編程工具大。150.0M語(yǔ)言:英文 評(píng)分:4.0
  • 標(biāo)簽:
立即下載

在進(jìn)行win32開(kāi)發(fā)中對(duì)文件的讀寫(xiě)是最常用的操作之一,這編文章西西小編和大家一起來(lái)學(xué)習(xí)一下在Delphi中如何讀寫(xiě)文件的方法。

Delphi 支持三種文件類(lèi)型:  文本文件、記錄文件、無(wú)類(lèi)型文件。

文本文件的讀寫(xiě):

文本文件 是以行為單位進(jìn)行讀、寫(xiě)的。由于每一行的長(zhǎng)度不一定相同,不能計(jì)算出給定行在文件中的確切位置,因而只能順序地讀寫(xiě)。

文本文件只能單獨(dú)為讀或?qū)懚蜷_(kāi),在一個(gè)打開(kāi)的文本文件上同時(shí)進(jìn)行讀、寫(xiě)操作是不允許的。

文本文件 的打開(kāi)需要兩個(gè)步驟:1.文件變量與文件名關(guān)聯(lián);2.初始化讀寫(xiě)。

1.文件變量與文件名關(guān)聯(lián):
AssignFile(VarTxt, FileName);
FileName 如果省略路徑將默認(rèn)當(dāng)前目錄。

2.初始化讀寫(xiě)有三種方式:
(1) Reset: 只讀打開(kāi), 指針移到文件頭;
(2) Rewrite: 創(chuàng)建新文件并打開(kāi), 只寫(xiě);
(3) Append: 從尾部追加, 指針當(dāng)然在文件尾。

文件不存在時(shí)使用 Reset 或 Append 會(huì)引發(fā)一個(gè)I/O異常。

最后用 CloseFile 關(guān)閉文件。

為保持兼容,Delphi 也允許用戶(hù)用 Assign 建立關(guān)聯(lián), 用 Close 關(guān)閉文件。

第一種、直接用 memo 加載 txt文件

1. memo控件讀取txt
memo1.Lines.LoadFromFile('E:\*\*.txt');

要讀取一個(gè)txt文件的全部?jī)?nèi)容可以借用到 stringlist 來(lái)中轉(zhuǎn)。

建立一個(gè)stringlist,如:
var
sList: TStringlist;
begin
   sList := TStringList.Create;
try
   sList.LoadFromFile('C:\a.txt');
finally
sList.Free;
end;
end;

然后可以將TStringList 轉(zhuǎn)換為 string類(lèi)型  str=ts.GetText ; 來(lái)轉(zhuǎn)換



第二種、Delph內(nèi)建的函數(shù)讀寫(xiě)

示例代碼:

var
  F: Text;  //TextFile 和 Text 是一樣的
  FileName: string = 'c:\temp\test.txt';
//寫(xiě)文件
procedure TForm1.Button1Click(Sender: TObject);
begin
  AssignFile(F,FileName);
  Rewrite(F);  //會(huì)覆蓋已存在的文件
  Writeln(F, '第一行');
  Writeln(F, '第二行');
  CloseFile(F);
end;
//讀文件(先執(zhí)行寫(xiě)文件)
procedure TForm1.Button2Click(Sender: TObject);
var
  s: string;
begin
  AssignFile(F,FileName);
  Reset(F);  //只讀打開(kāi)
  Readln(F, s);   //讀取
  ShowMessage(s); //顯示: 第一行
  Readln(F, s);   //繼續(xù)讀取
  ShowMessage(s); //顯示: 第二行
  CloseFile(F);
end;
//追加
procedure TForm1.Button3Click(Sender: TObject);
begin
  AssignFile(F,FileName);
  Append(F);  //打開(kāi)準(zhǔn)備追加
  Writeln(F, '第三行');
  Writeln(F, '第四行');
  CloseFile(F);
end;
//讀取全部(需要Memo幫忙顯示)
procedure TForm1.Button4Click(Sender: TObject);
var
  s: string;
begin
  AssignFile(F,FileName);
  Reset(F);  //只讀打開(kāi)
  Memo1.Clear;
  while not Eof(F) do
  begin
    Readln(F, s);
    Memo1.Lines.Add(s);
  end;
  CloseFile(F);
end;
 
第三種、Delphi 用流來(lái)讀取TXT文件
TXT文本文件是一種以ACSII嗎存儲(chǔ)數(shù)據(jù)的文件。在TXT文件中只能夠存儲(chǔ)一些字符數(shù)據(jù),所以這種文件的移植性和通用性很強(qiáng),具有較高的易用性,并且 被廣泛應(yīng)用,所以Delphi對(duì)該類(lèi)型文件提供了較好的支持。目前在Internet上最為流行的XML文件也是一種文本文件。TXT文本文件的操作非常 簡(jiǎn)單,具體操作過(guò)程如下: 

1.首先要聲明一個(gè)TextFile類(lèi)型的的文件指針。如:var MyFile:TEXTFile。 

2.然后使用AssignFile方法將聲明的文件指針與外部TXT文件相關(guān)聯(lián)。AssignFile (FileName ) ;FileName 既可以是全路徑名,也可以?xún)H是文件名。對(duì)于后者系統(tǒng)將在當(dāng)前目錄下查找。 

3.初始化讀寫(xiě)有三種方式: Reset為讀打開(kāi)文件并把文件指針移動(dòng)到文件首;Rewrite為寫(xiě)創(chuàng)建一個(gè)新文件;Append為寫(xiě)打開(kāi)存在的文件并把文件指針定位在文件尾。 

4.讀取或?qū)懭胛谋。Readln方法能夠讀取一行文本,writeln方法能向文件寫(xiě)入一行文本。 

5.最后用Closefile方法關(guān)閉已打開(kāi)的文件。 

在這里我們要介紹的就是如何用流來(lái)讀取TXT文件中的數(shù)據(jù),并且在指定顯示區(qū)域顯示出來(lái)。首先讓我們通過(guò)一個(gè)簡(jiǎn)單范例來(lái)了解ReadBuffer方法,讓我們來(lái)讀取指定TXT文件的前10個(gè)字符。 


procedure TForm1.Button1Click(Sender: TObject); 

var 

MyFile:TMemoryStream; 

Filebuf: array[1..10] of char; //這里聲明的是靜態(tài)數(shù)組 

a:string; 

Begin 

If opendialog1.Execute then 

begin 

MyFile:=TMemoryStream.Create;//創(chuàng)建流 

MyFile.LoadFromFile(opendialog1.FileName); 

MyFile.ReadBuffer(Filebuf,10);//讀取TXT文件前10個(gè)字符 

a:= strpas(Filebuf) //將數(shù)組轉(zhuǎn)化成為字符串 

Form1.canvas.Textout(0,0,a); //在顯示區(qū)域上顯示字符串 

FreeAndNil(MyFile);//釋放流 

end; 

end; 


以上范例在窗體Form1上顯示的字符串就是打開(kāi)TXT文本的前10個(gè)字符,但是如何得到文本的所有數(shù)據(jù)呢?這里就需要用到動(dòng)態(tài)數(shù)組。動(dòng)態(tài)數(shù)組在流中 的應(yīng)用是個(gè)難點(diǎn),因?yàn)镈elphi中的靜態(tài)數(shù)組是在運(yùn)行前就已經(jīng)將內(nèi)存空間分配好,所以它的變量地址就是數(shù)組的第一維地址,即沒(méi)有描述部份,故它的 sizeof為1個(gè)字節(jié),而動(dòng)態(tài)數(shù)組是在運(yùn)行期間動(dòng)態(tài)分配一個(gè)內(nèi)存塊,所以它的變量地址部分需要一個(gè)描述部分,故它的sizeof為四個(gè)字節(jié),用于存放描 述表,所以在用 Readbuffer方法時(shí),需要采用數(shù)組的第一維地址為起始地址,才不會(huì)導(dǎo)致內(nèi)存溢出。下面這個(gè)范例就是用流來(lái)讀取TXT文件中的全部數(shù)據(jù)。 


procedure TForm1.Button1Click(Sender: TObject); 

var 

MyFile:TMemoryStream; 

Filebuf: array of pchar; //這里聲明的是動(dòng)態(tài)數(shù)組 

iLen:Int64; 

Begin 

If opendialog1.Execute then 

begin 

iLen:=0; 

MyFile:=TMemoryStream.Create; 

MyFile.LoadFromFile(opendialog1.FileName); 

iLen:=MyFile.Size;//獲得指定TXT文件的大小 

SetLength(FileBuf,iLen);//設(shè)置動(dòng)態(tài)數(shù)組的長(zhǎng)度為T(mén)XT文件的大小 

MyFile.ReadBuffer(FileBuf[0],iLen);//讀取TXT文件全部數(shù)據(jù) 

Form1.canvas.Textout(0,0,string(FileBuf)); //在顯示區(qū)域上顯示字符串; 

FreeAndNil(MyFile); 

end; 

end; 


以上的范例可在窗體Form1上顯示指定TXT文件的全部數(shù)據(jù)。 

現(xiàn)在讓我們來(lái)研究一下如何從TXT文本中的指定位置讀取一定量的數(shù)據(jù),這里用到的函數(shù)就是seek(offset:integer,origin:word)integer; 它的參數(shù)所代表的意義: offset是偏移量; 

而origin是計(jì)算方式 ,下面三個(gè)就是origin的值,soFromBeginning是從文件頭開(kāi)始計(jì)算,soFromCurrent是從當(dāng)前位置開(kāi)始計(jì)算,而soFromEnd Offset是從最后位置開(kāi)始計(jì)算。 

下面這個(gè)范例就是從TXT文本中的指定位置取一定量的數(shù)據(jù) 

procedure TForm1.Button1Click(Sender: TObject); 

var 

MyFile:TMemoryStream; 

Filebuf: array of pchar; //這里聲明的是動(dòng)態(tài)數(shù)組 

iLen:Int64; 

Begin 

If opendialog1.Execute then 

begin 

iLen:=0; 

MyFile:=TMemoryStream.Create; 

MyFile.LoadFromFile(opendialog1.FileName); 

iLen:=MyFile.Size; 

SetLength(FileBuf,1024);//設(shè)置動(dòng)態(tài)數(shù)組的長(zhǎng)度; 

Myfile.Seek(1024, soFromBeginning);//從文件頭開(kāi)始計(jì)算到1024個(gè)字節(jié)處 

MyFile.ReadBuffer(FileBuf[0],1024);//從seek設(shè)置的當(dāng)前位置往后讀取1024字節(jié) 

Form1.canvas.Textout(0,0,string(FileBuf)); //在窗體上顯示; 

FreeAndNil(MyFile); 

end; 

end
    Delphi
    (9)Delphi
    比以往的版本都要快,而且它保留了一些的特性,最大的特點(diǎn)就是向下兼容的能力,與相比,簡(jiǎn)直是一個(gè)巨大的飛越,編碼的問(wèn)題大多被自行消化掉了。的新功能其實(shí)并不是很多,并沒(méi)有那么驚艷,主要都集中在細(xì)節(jié)改進(jìn)。...更多>>
    • Embarcadero RAD Studio 2010v2010

      05-15 / 1.66G

      推薦理由:本軟件系 Embarcadero公司(CodeGear的)RAD Studio 正版軟件。也是正式版軟件。 不需要任何序列號(hào)和破解文
    • delphi 2010

      03-26 / 604KB

      推薦理由:請(qǐng)仔細(xì)看使用說(shuō)明覺(jué)對(duì)真的 本人親自測(cè)試Delphi新版本(D2010)簡(jiǎn)介:1. 多核的支持 / 異步方法 (VC中早就擁有
    • Delphi 5安裝版

      01-10 / 224.2M

      推薦理由:delphi 5 Delphi是著名的Borland(現(xiàn)在已和Inprise合并)公司開(kāi)發(fā)的可視化軟件開(kāi)發(fā)工具!罢嬲某绦騿T用c
    • Delphi 7(集成控件)v7.0Build8.1企

      03-25 / 211.9M

      推薦理由:Borland Delphi V7.0 Build 8.1企業(yè)版 龍卷風(fēng)集成U pdate1 已集成官方的Update1完整升級(jí)包,版本號(hào)為,安裝
    • Delphi7_Lite_Mini_Edition_v7.3.1

      08-30 / 22.6M

      推薦理由:elphi7精簡(jiǎn)優(yōu)化迷你版,包含幫助.只支持Standard,DB,ADO,BDE,DBX,Midas,ShellCtrls,internet,Delphi 1.0 Com
    • Delphi77.0 Build 8.1企業(yè)版龍卷風(fēng)

      05-15 / 150.0M

      推薦理由:Borland Delphi V7.0 Build 8.1企業(yè)版 龍卷風(fēng)集成U pdate1 已集成官方的Update1完整升級(jí)包,版本號(hào)為,安裝

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    第 2 樓 江蘇鎮(zhèn)江電信 網(wǎng)友 客人 發(fā)表于: 2015/6/17 12:51:23
    好!很具體,很清楚,對(duì)需要文件處理的人 非常有用

    支持( 0 ) 蓋樓(回復(fù))

    第 1 樓 中國(guó)CZ88.NET 網(wǎng)友 客人 發(fā)表于: 2013/3/15 15:46:03
    我就是想要這方面的,非常好。。!

    支持( 0 ) 蓋樓(回復(fù))

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱(chēng):
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)