IOUtils 單元(7): TFile 檔案操作

來源:互聯網
上載者:User

IOUtils 單元主要就是三個結構: TDirectory、TPath、TFile, 很有用; 下面是 TFile 的功能簡介.<br />TFile.Exists();<br />//判斷指定的檔案是否存在<br />TFile.Copy();<br />//複製檔案<br />var<br /> source,dest: string;<br />begin<br /> TFile.Copy(source, dest); {不允許覆蓋同名的檔案}<br /> TFile.Copy(source, dest, True); {將覆蓋同名的檔案}<br />end;<br />TFile.Move();<br />//移動檔案<br />var<br /> source,dest: string;<br />begin<br /> TFile.Move(source, dest);<br />end;<br />TFile.Delete();<br />//刪除檔案<br />TFile.Replace();<br />//替換檔案, dest 會備份在 bak, 複製 source 的內容到 dest 後, sourece 會被刪除.<br />var<br /> source,dest,bak: string;<br />begin<br /> source := 'c:/temp/t1.txt';<br /> dest := 'c:/temp/t2.txt';<br /> bak := 'c:/temp/t3.txt';<br /> TFile.Replace(source, dest, bak); {前兩個檔案必須存在}<br /> TFile.Replace(source, dest, bak, True); {忽略錯誤}<br />end;<br />TFile.Create();<br />//建立檔案並返回一個和檔案關聯的 TFileStream, 指定檔案存在則覆蓋<br />var<br /> buf: array[0..1023] of Byte;<br /> fs: TFileStream;<br />begin<br /> {類比一個緩衝區並填充}<br /> FillChar(buf, SizeOf(buf), 65);<br /> {使用返回的 TFileStream 寫入流}<br /> fs := TFile.Create('c:/temp/test1.txt');<br /> fs.Write(buf, SizeOf(buf));<br /> fs.Free;<br /> {如果已知要寫入流的大小, 可以使用第二個參數指定, 這樣會快一點}<br /> fs := TFile.Create('c:/temp/test2.txt', SizeOf(buf));<br /> fs.Write(buf, SizeOf(buf));<br /> fs.Free;<br />end;<br />TFile.OpenWrite();<br />//按唯寫許可權開啟檔案並返回一個和檔案關聯的 TFileStream<br />const<br /> buf: array[0..2] of Char = ('A', 'B', 'C');<br />var<br /> path: string;<br /> fs: TFileStream;<br />begin<br /> path := 'c:/temp/test.dat'; {檔案要存在}<br /> fs := TFile.OpenWrite(path);<br /> fs.Seek(0, TSeekOrigin.soEnd); {把流指標移到尾部}<br /> fs.Write(buf, Length(buf)*SizeOf(Char));<br /> fs.Free;<br />end;<br />TFile.OpenRead();<br />//按唯讀許可權開啟檔案並返回一個和檔案關聯的 TFileStream<br />var<br /> path: string;<br /> fs: TFileStream;<br />begin<br /> path := 'c:/temp/test.dat'; {檔案要存在}<br /> fs := TFile.OpenRead(path);<br /> ShowMessage(IntToStr(fs.Size));<br /> fs.Free;<br />end;<br />TFile.Open();<br />//開啟檔案並返回一個和檔案關聯的 TFileStream<br />var<br /> path: string;<br /> fs: TFileStream;<br />begin<br /> path := 'c:/temp/test.dat'; {檔案要存在}<br /> //重載一: 指定開啟模式; 預設操作許可權是 faReadWrite, 預設線程存取權限是 fsNone<br /> fs := TFile.Open(path, TFileMode);<br /> //重載二: 指定開啟模式、操作許可權; 預設線程存取權限是 fsNone<br /> fs := TFile.Open(path, TFileMode, TFileAccess);<br /> //重載三: 指定開啟模式、操作許可權和其他線程的存取權限<br /> fs := TFile.Open(path, TFileMode, TFileAccess, TFileShare);<br />{ TFileMode 開啟模式:<br /> TFileMode.fmCreateNew 建立新檔案, 如果檔案已存在則將引發異常;<br /> TFileMode.fmCreate 建立新檔案, 如果檔案已存在則覆蓋;<br /> TFileMode.fmOpen 開啟現有檔案, 如果該檔案不存在則將引發異常;<br /> TFileMode.fmOpenOrCreate 開啟檔案, 如果檔案不存在則建新檔案;<br /> TFileMode.fmTruncate 開啟現有檔案並清空;<br /> TFileMode.fmAppend 開啟現有檔案並把流指標移到檔案尾, 如果檔案不存在建立新檔案.<br />}<br />{ TFileMode 操作許可權:<br /> TFileMode.faRead 唯讀;<br /> TFileMode.faWrite 唯寫;<br /> TFileMode.faReadWrite 可讀寫.<br />}<br />{ TFileShare 對其他線程的訪問限制:<br /> TFileMode.fsNone 禁止其他線程共用;<br /> TFileMode.fsRead 允許其他線程讀;<br /> TFileMode.fsWrite 允許其他線程寫;<br /> TFileMode.fsReadWrite 允許其他線程讀寫.<br />}<br />end;<br />TFile.CreateText();<br />//建立文字檔, 存在則覆蓋; 會返回 TStreamWriter<br />var<br /> path: string;<br /> sw: TStreamWriter;<br />begin<br /> path := 'c:/temp/test.txt';<br /> sw := TFile.CreateText(path); {使用的是 UTF8 格式}<br /> sw.Write(123);<br /> sw.Write('ABC');<br /> sw.Close;<br />end;<br />TFile.AppendText();<br />//為追加而開啟文字檔, 不存在則建立; 會返回 TStreamWriter<br />var<br /> path: string;<br /> sw: TStreamWriter;<br />begin<br /> path := 'c:/temp/test.txt';<br /> sw := TFile.AppendText(path); {使用的是 UTF8 格式}<br /> sw.Write(123);<br /> sw.Write('ABC');<br /> sw.Close;<br />end;<br />TFile.AppendAllText();<br />//開啟文字檔, 追加文本後關閉; 檔案不存在則建立.<br />var<br /> path: string;<br />begin<br /> path := 'c:/temp/test.txt';<br /> TFile.AppendAllText(path, 'NewString');<br /> TFile.AppendAllText(path, 'NewString', TEncoding.UTF8); {可指定編碼格式}<br />end;<br />TFile.OpenText();<br />//開啟文字檔, 返回 TStreamReader.<br />var<br /> path: string;<br /> sr: TStreamReader;<br />begin<br /> path := 'c:/temp/test.txt';<br /> sr := TFile.OpenText(path); {將使用 UTF8 格式}<br /> ShowMessage(sr.ReadLine);<br /> sr.Close;<br />end;<br />TFile.WriteAllText();<br />//開啟文字檔, 寫入指定文本後關閉; 不管檔案存在與否都將覆蓋!<br />var<br /> path: string;<br />begin<br /> path := 'c:/temp/test.txt';<br /> TFile.WriteAllText(path, '123');<br /> TFile.WriteAllText(path, '123', TEncoding.UTF8); {可指定編碼格式}<br />end;<br />TFile.WriteAllLines();<br />//開啟文字檔, 寫入指定的字串數組後關閉; 不管檔案存在與否都將覆蓋!<br />var<br /> path: string;<br /> arr: TStringDynArray; {這定義在 Types 單元}<br />begin<br /> SetLength(arr, 2);<br /> arr[0] := 'AAA';<br /> arr[1] := 'BBB';<br /> path := 'c:/temp/test.txt';<br /> TFile.WriteAllLines(path, arr);<br /> TFile.WriteAllLines(path, arr, TEncoding.UTF8); {可指定編碼格式}<br />end;<br />TFile.WriteAllBytes();<br />//開啟文字檔, 寫入指定的 TBytes 數組後關閉; 不管檔案存在與否都將覆蓋!<br />var<br /> path: string;<br /> bs: TBytes;<br />begin<br /> SetLength(bs, 2);<br /> bs[0] := 65;<br /> bs[1] := 66;<br /> path := 'c:/temp/test.txt';<br /> TFile.WriteAllBytes(path, bs);<br />end;<br />TFile.ReadAllText();<br />//開啟文字檔, 全部讀取字串變數後關閉.<br />var<br /> path: string;<br /> str: string;<br />begin<br /> path := 'c:/temp/test.txt';<br /> str := TFile.ReadAllText(path);<br /> str := TFile.ReadAllText(path, TEncoding.UTF8); {可指定編碼格式}<br />end;<br />TFile.ReadAllLines();<br />//開啟文字檔, 全部讀入到字串數組後關閉.<br />var<br /> path: string;<br /> arr: TStringDynArray; {這定義在 Types 單元}<br />begin<br /> path := 'c:/temp/test.txt';<br /> arr := TFile.ReadAllLines(path);<br /> arr := TFile.ReadAllLines(path, TEncoding.UTF8); {可指定編碼格式}<br /> ShowMessage(arr[0]);<br />end;<br />TFile.ReadAllBytes();<br />//開啟文字檔, 全部讀入到 TBytes 數組後關閉;<br />var<br /> path: string;<br /> bs: TBytes;<br />begin<br /> path := 'c:/temp/test.txt';<br /> bs := TFile.ReadAllBytes(path);<br /> ShowMessage(IntToStr(Length(bs)));<br />end;<br />此兩函數,“萬一”覺得有些問題,我經過測試後發現這兩個函數是有作用的, 特別是在win7下很明顯,操作過後的檔案名稱會變成綠色。原因是對檔案進行加密,這種經過加密的檔案就會以綠色檔案名稱表示,這種加密過的檔案,如果別人用 別的賬戶登陸是無法訪問的,只有用你的賬戶登陸才可以訪問。我相信在XP下也是如此。這個跟我們通常理解的加密和解密不一樣。<br />TFile.Encrypt(); {加密檔案}<br />TFile.Decrypt(); {解密檔案}<br />其他方法:<br />{讀取和設定屬性的方法前面有過例子}<br />TFile.GetAttributes();<br />TFile.SetAttributes();<br />{讀取和設定檔案的建立時間、最後寫入時間、最後訪問時間(分別有本地和UTC兩種時間格式)}<br />TFile.GetCreationTime();<br />TFile.GetCreationTimeUtc();<br />TFile.GetLastAccessTime();<br />TFile.GetLastAccessTimeUtc();<br />TFile.GetLastWriteTime();<br />TFile.GetLastWriteTimeUtc();<br />TFile.SetCreationTime();<br />TFile.SetCreationTimeUtc();<br />TFile.SetLastAccessTime();<br />TFile.SetLastAccessTimeUtc();<br />TFile.SetLastWriteTime();<br />TFile.SetLastWriteTimeUtc();<br />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.