给你个标准的能用的函数:
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位,不用你管。