給你個標準的能用的函數:
function GetFileSize(sFileName: string): real;
var
f: TFileStream;
begin
if FileExists(sFileName) then
begin
f := TFileStream.Create(sFileName, fmOpenRead or fmShareDenyNone);
Result := f.Size ; //返迴文件大小
f.Free;
end
else
Result := 0;
end;
得到的大小就是 bit,想轉成KB 就 /1024 想轉成MB 就 除2個1024
❷ delphi 如何獲取文件的大小和類型
示例代碼如下:
首先,uses 添加IdGlobalProtocols。
2.
functionTForm1.GetFileSizeStr(fName:string):string;
varnSize:Integer;
begin
nSize:=FileSizeByName(fName);
ifnSize>1073741824then
Result:=FormatFloat('###,##0.00G',nSize/1073741824)
elseifnSize>1048576then
Result:=FormatFloat('###,##0.00M',nSize/1048576)
elseifnSize>1024then
Result:=FormatFloat('###,##00K',nSize/1024)
else
Result:=FormatFloat('###,#0B',nSize);
ifLength(Result)>2then
ifResult[1]='0'then
Delete(Result,1,1);
end;
procereTForm1.Button1Click(Sender:TObject);
begin
ShowMessage('文件大小是:'+GetFileSizeStr('d: able.mdb'));
end;
示例截圖:
❸ DELPHI文件、磁碟操作函數
軟體大多都要對文件 磁碟進行操作 熟悉掌握這些函數可以幫助你輕松實現創建 刪除 保存文件等功能
Append功能說明 追加內容到文件中 文件必須要存在
參考實例
var
S String
F TextFile
begin
S = This is a book
AssignFile(F C MyFile txt ) // 將C MyFile txt文件與F變數建立連接 後面可以使用F變數對文件進行操作
Append(F) // 以追加的方式打開文件
Writeln(F S) // 將S變數中的內容追加到文本尾後
CloseFile(F) // 關閉文件
end
AssignFile功能說明 與指定的文件建立連接
參考實例
var
F TextFile // 聲明文本文件類型變數
begin
AssignFile(F C MyFile txt ) // 將C MyFile txt文件與F變數建立連接 後面可以使用F變數對文件進行操作
end
ChDir功能說明 改變當前目錄(文件夾)
參考實例
var
sDir String
begin
sDir = C Windows
ChDir(sDir) // 此時 系統的當前目錄則為C Windows目錄
舉碰end
CloseFile功能說明 關閉文件 當對文件的操作完成後 應該使用CloseFile函數關閉打開的文件
參考實例
var
S String
AllText String
F TextFile
begin
AssignFile(F C MyFile txt ) // 將C MyFile txt文件與F變數建立連接 後面可以使用F變數對文件進行操作
Reset(F) // 打開文件
while not EOF(F) do begin // 使用While循環 一直判斷是否到了文件未尾
Readln(F S) // 讀取一行文本
AllText = AllText + S
end
CloseFile(F) // 關閉文件
end
DeleteFile功能說明 刪除指定的文明答逗件 該函數只有一個參數 此參數為欲刪除文件的完整路徑 如果刪除成功 則返回True 若刪除失敗 或文件不存在則返回False
參考實例
var
IsOK Boolean // 用於保存刪除狀態
begin
IsOK = DeleteFile( C My Documentsl ) // 函數執著後 將結果返回給IsOK變數 如果IsOK變數為True 則表示文件刪除成功
if IsOK then ShowMessage( 文件刪除成功! )
else ShowMessage( 文件刪除失敗! )
end
DirectoryExists功能說明 檢測指定的文件夾否存在 如果存在則返回True 反之則為False
參考實例
var
IsExists Boolean
begin
IsExists = DirectoryExists ( C Windows )
if IsExists then ShowMessage( Windows文件夾存在! )
else ShowMessage( Windows文件夾不存在! )
end
DiskFree功能說明 獲取指定磁碟的剩餘空間 該函數只有一個參數 該參數用於指定要獲取剩餘空間的磁碟號 當參數為 時 表示獲取當前磁碟的剩餘空間 為A盤 為B盤 以此類推 如果返回值為
表示指定激賣的磁碟無效
參考實例
var
FreeSize Int
begin
FreeSize = DiskFree( ) // 獲取C盤中的剩餘空間 返回的值是以 位元組 為單位的
end
DiskSize功能說明 獲取指定磁碟的空間 該函數只有一個參數 該參數用於指定要獲取磁碟空間的磁碟號 當參數為 時 表示獲取當前磁碟的空間 為A盤 為B盤 以此類推 如果返回值為 表示指
定的磁碟無效
參考實例
var
DiskSize Int
begin
DiskSize = DiskSize( ) // 獲取C盤的空間 返回的值是以 位元組 為單位的
end
EOF功能說明 判斷文件指針是否移動到了文件未尾 當EOF函數返回值為True時 則不可以使用Readln函數進行讀取文件了
參考實例
var
S String
AllText String
F TextFile
begin
AssignFile(F C MyFile txt ) // 將C MyFile txt文件與F變數建立連接 後面可以使用F變數對文件進行操作
Reset(F) // 打開文件
while not EOF(F) do begin // 使用While循環 一直判斷是否到了文件未尾
Readln(F S) // 讀取一行文本
AllText = AllText + S
end
end
Erase功能說明 刪除文件
參考實例
var
F File
begin
AssignFile(F C MyFile txt ) // 將C MyFile txt文件與F變數建立連接 後面可以使用F變數對文件進行操作
Reset(F) // 打開文件
CloseFile(F) // 關閉文件
Erase(F) // 刪除文件 在刪除文件之前必須先關閉文件
end
FileExists功能說明 檢測指定的文件否存在 如果存在則返回True 反之則為False
參考實例
var
IsExists Boolean
begin
IsExists = FileExists( C Test txt )
if IsExists then ShowMessage( 該文件存在! )
else ShowMessage( 該文件不存在! )
end
FileSize功能說明 獲取文件大小 返回的結果是位元組為單位
參考實例
var
F file of Byte
nSize Longint
begin
AssignFile(F C MyFile txt ) // 將C MyFile txt文件與F變數建立連接 後面可以使用F變數對文件進行操作
Reset(F) // 打開文件
nSize = FileSize(F) // 獲取文件大小
CloseFile(F) // 關閉文件
end
ForceDirectories功能說明 創建新的子目錄 路徑中不存在的目錄將一同創建
參考實例
ForceDirectories( C FlashMyFolder ) // 如果Flash文件夾本身不存的話 那麼將會先創建Flash文件夾 然後再創建MyFolder文件夾
MkDir功能說明 創建一個新的子目錄(文件夾)
參考實例
MkDir( C MyFolder ) // 在C盤根目錄中創建了一個名叫MyFolder的文件夾
需要注意的是 如果在本身不存在的目錄中創建子目錄將會失敗 比如C盤根本不存在Flash文件夾 寫成MkDir( C FlashMyFolder ) 這樣將不能成功創建MyFolder文件夾
Reset功能說明 以只讀方式打開文件
參考實例
var
F TextFile // 聲明文本文件類型變數
begin
AssignFile(F C MyFile txt ) // 將C MyFile txt文件與F變數建立連接 後面可以使用F變數對文件進行操作
Reset(F) // 打開文件
end
Rewrite功能說明 以可寫方式打開文件 如果文件不存在 將會自動創建 使用該函數 將會覆蓋文件中的所有內容
參考實例
var
F TextFile // 聲明文本文件類型變數
begin
AssignFile(F C MyFile txt ) // 將C MyFile txt文件與F變數建立連接 後面可以使用F變數對文件進行操作
Rewrite(F) // 打開文件 如果文件不存在 將會在C盤中創建MyFile txt文件 如果文件存在 將會覆蓋MyFile txt中的所有內容
end
Readln功能說明 讀取一行文本
參考實例
var
S String
F TextFile
begin
AssignFile(F C MyFile txt ) // 將C MyFile txt文件與F變數建立連接 後面可以使用F變數對文件進行操作
Reset(F) // 打開文件
Readln(F S) // 讀取一行文本到S變數中
end
Rename功能說明 更改文件名
參考實例
var
F File
begin
AssignFile(F C MyFile txt ) // 將C MyFile txt文件與F變數建立連接 後面可以使用F變數對文件進行操作
ReName(F C NewFile txt ) // 更名為NewFile txt
end
Writeln功能說明 寫入一行文本
參考實例
var
S String
F TextFile
begin
S = This is a book
AssignFile(F C MyFile txt ) // 將C MyFile txt文件與F變數建立連接 後面可以使用F變數對文件進行操作
Rewrite(F) // 創建新文件
Writeln(F S) // 將S變數中的內容寫入文本中
lishixin/Article/program/Delphi/201311/8445
❹ delphi如何獲得文件大小
添加一個openDialog組賀游檔件
var rmFilestream:Tfilestream;
xuanzewenjian:string;
MemSize:integer;
begin
if (openDialog1.Execute) and (openDialog1.FileName<>磨凳'') then
begin
xuanzewenjian:=OpenDialog1.FileName;//獲取文件名稱及完整路徑
rmFilestream:=TFileStream.Create(xuanzewenjian,fmopenRead);
rmFilestream.Position:=0;
MemSize:= rmFilestream.Size;/禪亂/獲取文件大小
showmessage(inttostr(memsize));
end;
end;
❺ delphi 如果我想獲得textfile文件的長度或者行數,那麼應該怎麼辦了
var filea:file of byte; fsize:integer;begin assignfile('txt.txt',filea); reset(filea); fsize:=filesize(filea);//獲得文件大小 end; end; 查看更多版答案權>>
❻ delphi讀取大容量txt並對其進行一個處理
我嘗試寫了一個過程,參數分別是要處理的文件InFile,結果文件OutFile,寬字元數量WideWordCount
procere DoText(const InFile, OutFile: string; WideWordCount: Integer);
var
FileStream: TFileStream;
OutList: TStringList;
TmpStr: string;
Cnt, ReadCnt: Integer;
begin
OutList := TStringList.Create;
FileStream := TFileStream.Create(InFile, fmOpenRead or fmShareDenyNone);
try
Cnt := WideWordCount * 2;
SetLength(TmpStr, Cnt);
while True do
begin
ReadCnt := FileStream.Read(TmpStr[1], Cnt);
if ReadCnt < Cnt then
begin
SetLength(TmpStr, ReadCnt);
OutList.Add(TmpStr);
Break;
end;
OutList.Add(TmpStr);
end;
OutList.SaveToFile(OutFile);
finally
OutList.Free;
FileStream.Free;
end;
end;
❼ delphi 預估jpg修改後容量大小
沒辦法預估(或者說預估出來的很大手埋不準),你可以在修滾螞改長寬後自動先在一個文件夾(比如系統的臨時目錄)保存一個臨時的jpg,薯螞取它的大小。
❽ 在DELPHI中如何用文件流讀寫幾百M大的文件呢
unit U_Client;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, Math,
StdCtrls, ComCtrls;
type
Tfrm_Client = class(TForm)
SaveDialog1: TSaveDialog;
IdTCPClient1: TIdTCPClient;
Button1: TButton;
StatusBar1: TStatusBar;
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
procere Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frm_Client: Tfrm_Client;
implementation
{$R *.dfm}
procere Tfrm_Client.Button1Click(Sender: TObject);
var
cmd: string;
ASize, TotalSize: Int64;
AFileStream: TFileStream;
begin
IdTCPClient1.Host := Edit1.Text; //連接主機
IdTCPClient1.Port := StrToIntDef(Edit2.Text, 9925); //埠
IdTCPClient1.Connect; //連接
try
IdTCPClient1.WriteLn('BEGIN'); //提示伺服器開始接收
cmd := IdTCPClient1.ReadLn;
//以「|」符號分離文件名
SaveDialog1.FileName := Copy(cmd, Pos('|', cmd) + 1, Length(cmd));
if not SaveDialog1.Execute then
begin
IdTCPClient1.WriteLn('CANCEL'); //告訴伺服器取消
IdTCPClient1.Disconnect; //斷開連接
exit;
end;
TotalSize := StrToInt(Copy(cmd, 0, Pos('|', cmd) - 1)); //分離文件大小
//建立文件流准備接收
AFileStream := TFileStream.Create(SaveDialog1.FileName, fmCreate);
try //循環開始接受
repeat
IdTCPClient1.WriteLn(IntToStr(AFileStream.Size));//發送當前傳輸的位置
ASize := Min(TotalSize - AFileStream.Size, IdTCPClient1.RecvBufferSize);
//選擇剩餘大小和緩沖區大小小的一個作為傳輸的大小
IdTCPClient1.ReadStream(AFileStream, ASize); //接收流
StatusBar1.SimpleText := Format('當前傳輸位置%d/大小%d', [AFileStream.Size, TotalSize]);
Application.ProcessMessages;
until AFileStream.Size = TotalSize; //大小一致了表示結束
finally
AFileStream.Free; //釋放文件流
end;
IdTCPClient1.WriteLn('END'); //提示伺服器傳輸完成
StatusBar1.SimpleText := '傳輸完成...';
except
StatusBar1.SimpleText := '連接伺服器失敗或者對方已經中斷傳輸!';
end;
IdTCPClient1.Disconnect;
end;
end.
unit U_Server;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, IdBaseComponent, IdComponent, IdTCPServer, Math;
type
Tfrm_Server = class(TForm)
IdTCPServer1: TIdTCPServer;
Button1: TButton;
Button2: TButton;
Button3: TButton;
ProgressBar1: TProgressBar;
StatusBar1: TStatusBar;
Edit1: TEdit;
Button4: TButton;
OpenDialog1: TOpenDialog;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
procere Button1Click(Sender: TObject);
procere Button4Click(Sender: TObject);
procere Button2Click(Sender: TObject);
procere Button3Click(Sender: TObject);
procere IdTCPServer1Execute(AThread: TIdPeerThread);
procere FormClose(Sender: TObject; var Action: TCloseAction);
private
AFileStream: TFileStream; //傳輸的文件流
procere ButtonBegin;
procere ButtonEnd;
{ Private declarations }
public
{ Public declarations }
end;
var
frm_Server: Tfrm_Server;
implementation
{$R *.dfm}
procere Tfrm_Server.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Edit1.Text := OpenDialog1.FileName;
end;
procere Tfrm_Server.Button4Click(Sender: TObject);
begin
Close;
end;
procere Tfrm_Server.Button2Click(Sender: TObject);
begin
if not FileExists(Edit1.Text) then //檢測文件是否存在
begin
Showmessage('文件不存在,請選擇文件!');
exit;
end;
//建立文件流
AFileStream := TFileStream.Create(Edit1.Text, fmOpenRead);
ProgressBar1.Max := AFileStream.Size;
ProgressBar1.Position := 0;
ButtonBegin; //VCL開始狀態設置
//伺服器准備好連接
IdTCPServer1.DefaultPort := StrToIntDef(Edit2.Text, 9925);
if not IdTCPServer1.Active then IdTCPServer1.Active := True;
end;
procere Tfrm_Server.ButtonBegin;
begin //VCL開始狀態設置
Button1.Enabled := False;
Button2.Enabled := False;
Button3.Enabled := True;
Button4.Enabled := False;
end;
procere Tfrm_Server.ButtonEnd;
begin //VCL結束狀態設置
Button1.Enabled := True;
Button2.Enabled := True;
Button3.Enabled := False;
Button4.Enabled := True;
end;
procere Tfrm_Server.Button3Click(Sender: TObject);
begin
StatusBar1.SimpleText := '傳輸取消...';
AFileStream.Free; //釋放文件流
ButtonEnd; //VCL結束狀態設置
end;
procere Tfrm_Server.IdTCPServer1Execute(AThread: TIdPeerThread);
var
cmd: string; //接收到客戶端的字元串信息
ASize: Integer; //需要傳輸的流大小
begin
with AThread.Connection do //已經連街上的一個進程
begin
cmd := UpperCase(ReadLn); //客戶端發送的命令字元串
if cmd = 'BEGIN' then //開始傳輸
begin
//告訴遠程傳輸文件的大小和文件名
WriteLn(Format('%d|%s', [AFileStream.Size, ExtractFileName(Edit1.Text)]));
StatusBar1.SimpleText := '准備傳輸...';
Exit;
end;
if cmd = 'END' then
begin //傳輸完成
Button3.Click;
StatusBar1.SimpleText := '傳輸完成...';
Exit;
end;
if cmd = 'CANCEL' then
begin //傳輸取消
StatusBar1.SimpleText := '傳輸取消...';
//保持傳輸狀態
Exit;
end;
//按照指定位置傳輸文件
AFileStream.Seek(StrToInT(cmd), soFromBeginning); //轉到文件流傳輸的位置
ASize := Min(AFileStream.Size - AFileStream.Position, RecvBufferSize);
//計算需要發送的大小,Min()函數在Math單元
OpenWriteBuffer; //准備發送緩沖
WriteStream(AFileStream, false, false, ASize);
//注意這個函數的參數。
CloseWriteBuffer; //結束發送緩沖
StatusBar1.SimpleText := Format('當前傳輸位置%s/大小%d', [cmd, AFileStream.Size]);
ProgressBar1.Position := ProgressBar1.Position + ASize;
end;
end;
procere Tfrm_Server.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IdTCPServer1.Active := False;
end;
end.
希望能幫到你!
❾ 網上找到一段delphi讀取文件大小的代碼,但是輸出的memsize是int64位的整數,怎麼轉換呢如下
1、不是廢話么,文件大小當然是以位元組表示,難道誰還按K、G給你轉換一下?
201210 / 1024 = 196.494140625K。
2、rmFilestream.Size是Int64,MemSize你自己定義的32位Integer,MemSize會自動取rmFilestream.Size的低32位,不用你管。