delphi删除文本文件
删除A文件夹下面3天以前产生的TXT文件,(DelphiEXE文件与A文件夹在同一目录)。满意再加30分。...
删除A文件夹下面3天以前产生的TXT文件,(Delphi EXE文件与A文件夹在同一目录)。满意再加30分。
展开
4个回答
展开全部
给你写了个函数专门来处理你的问题,如果文件夹里还有文件夹,本函数会通过递归调用来处理,已测试OK,记得加分哈
function FileTimeToDateTime(FileTime : TFileTime) : TDateTime;
var
temp : TSystemTime;
temp2 : _FileTime;
begin
filetimetoLocalfiletime(filetime,temp2);
FileTimeToSystemTime(temp2,temp);
result := SystemTimeToDateTime(temp);
end;
function myFileDelete(FilePath : string; myTime : TDateTime):boolean;
var
F : TSearchRec;
T,TFile : string;
FindFileData : WIN32_FIND_DATA;
fileCreateTime : TDateTime;
begin
ChDir(FilePath);
F.FindHandle := FindFirstFile('*.*',FindFileData);
if f.FindHandle <> INVALID_HANDLE_VALUE then
begin
repeat
TFile := FindFileData.cFileName;
if (TFile = '.') or (TFile = '..') then
continue;
if FindFileData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then
begin
if FilePath[length(FilePath)] <> '/' then
myFileDelete(FilePath + '/' + TFile,myTime)
else
myFileDelete(FilePath + tfile,myTime);
end
else
begin
t := FilePath + '/' + TFile;
fileCreateTime := FiletimeToDatetime(FindFileData.ftCreationTime);
if (fileCreateTime <= myTime) and (lowercase(extractfileext(TFile)) = '.txt') then //如果时间和格式符合条件,则删除
DeleteFile(t);
end;
until FindNextFile(F.FindHandle,FindFileData) = false;
findClose(f);
end
else
begin
result := false;
exit;
end;
result := true;
end;
调用时用:
procedure TForm1.Button3Click(Sender: TObject);
var
myTime : TdateTime;
Filepath : String;
begin
mytime := now - 3; //时间设定为三天
Filepath := 'F:/tm'; //这是文件夹路径
myFileDelete(FilePath,mytime);
end;
function FileTimeToDateTime(FileTime : TFileTime) : TDateTime;
var
temp : TSystemTime;
temp2 : _FileTime;
begin
filetimetoLocalfiletime(filetime,temp2);
FileTimeToSystemTime(temp2,temp);
result := SystemTimeToDateTime(temp);
end;
function myFileDelete(FilePath : string; myTime : TDateTime):boolean;
var
F : TSearchRec;
T,TFile : string;
FindFileData : WIN32_FIND_DATA;
fileCreateTime : TDateTime;
begin
ChDir(FilePath);
F.FindHandle := FindFirstFile('*.*',FindFileData);
if f.FindHandle <> INVALID_HANDLE_VALUE then
begin
repeat
TFile := FindFileData.cFileName;
if (TFile = '.') or (TFile = '..') then
continue;
if FindFileData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then
begin
if FilePath[length(FilePath)] <> '/' then
myFileDelete(FilePath + '/' + TFile,myTime)
else
myFileDelete(FilePath + tfile,myTime);
end
else
begin
t := FilePath + '/' + TFile;
fileCreateTime := FiletimeToDatetime(FindFileData.ftCreationTime);
if (fileCreateTime <= myTime) and (lowercase(extractfileext(TFile)) = '.txt') then //如果时间和格式符合条件,则删除
DeleteFile(t);
end;
until FindNextFile(F.FindHandle,FindFileData) = false;
findClose(f);
end
else
begin
result := false;
exit;
end;
result := true;
end;
调用时用:
procedure TForm1.Button3Click(Sender: TObject);
var
myTime : TdateTime;
Filepath : String;
begin
mytime := now - 3; //时间设定为三天
Filepath := 'F:/tm'; //这是文件夹路径
myFileDelete(FilePath,mytime);
end;
追问
你这个可以实现,如果换成是删除文件夹呢?请问怎么改呢?删除某目录下3天以前产生的文件夹。如可以实现再加30分。不能实现的话这题我照样会给你80分。
追答
删除一个文件夹下某个时间前的所有文件夹,已经帮你搞定并测试正常,用到的相关函数代码如下(也用了FileTimeToDateTime这个函数之前已贴出):
procedure DeleteDir(sDirectory:String);
var
sr:TSearchRec;
sPath,sFile:String;
begin
//检查目录名后面是否有'\'
if Copy(sDirectory,Length(sDirectory),1)'\'then
sPath:=sDirectory+'\'
else
sPath:=sDirectory;
//------------------------------------------------------------------
if FindFirst(sPath+'*.*',faAnyFile,sr)=0 then
begin
repeat
sFile:=Trim(sr.Name);
if sFile='.' then Continue;
if sFile='..' then Continue;
sFile:=sPath+sr.Name;
if(sr.Attr and faDirectory)0 then
DeleteDir(sFile)
else if(sr.Attr and faAnyFile)=sr.Attr then
DeleteFile(sFile);//删除文件
until FindNext(sr)0;
FindClose(sr);
end;
RemoveDir(sPath);
end;
function myDirDelete(FilePath : string; myTime : TDateTime):boolean;
var
F : TSearchRec;
T,TFile,temp : string;
FindFileData : WIN32_FIND_DATA;
fileCreateTime : TDateTime;
begin
ChDir(FilePath);
F.FindHandle := FindFirstFile('*.*',FindFileData);
if f.FindHandle INVALID_HANDLE_VALUE then
begin
repeat
TFile := FindFileData.cFileName;
if (TFile = '.') or (TFile = '..') then
continue;
if FindFileData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then
begin
if FilePath[length(FilePath)] '/' then
temp := FilePath + '/' + TFile
else
temp := FilePath + TFile;
fileCreateTime := FiletimeToDatetime(FindFileData.ftCreationTime);
if fileCreateTime <= myTime then //如果时间符合条件,则删除
DeleteDir(temp);
end
else
begin
end;
until FindNextFile(F.FindHandle,FindFileData) = false;
findClose(f);
end
else
begin
result := false;
exit;
end;
result := true;
end;
调用方式:
myDirDelete(FilePath,now - 3);
展开全部
遍历A文件夹下的所有文件,获取到创建时间,可以用这个函数
function FGetFileTime(sFileName: string; TimeType: integer): TDateTime;
var
ffd: TWin32FindData;
dft: DWord;
lft, Time: TFileTime;
h: THandle;
begin
h := FindFirstFile(Pchar(sFileName), ffd);
case TimeType of
0: Time := ffd.ftCreationTime;
1: Time := ffd.ftLastWriteTime;
2: Time := ffd.ftLastAccessTime;
end; //case
//获取文件信息
if h <> INVALID_HANDLE_VALUE then
begin
//转换FILETIME格式为localFILETIME格式
FileTimeToLocalFileTime(Time, lft);
//localFILETIME转换为DOStime格式
FileTimeToDosDateTime(lft, LongRec(dft).Hi, LongRec(dft).Lo);
//转换DOStime格式为Delphi的TDateTime格式
Result := FileDateToDateTime(dft);
end
else
result := 0;
end;
然后判断一下,是三天前的就删除 用DeleteFile这个函数
function FGetFileTime(sFileName: string; TimeType: integer): TDateTime;
var
ffd: TWin32FindData;
dft: DWord;
lft, Time: TFileTime;
h: THandle;
begin
h := FindFirstFile(Pchar(sFileName), ffd);
case TimeType of
0: Time := ffd.ftCreationTime;
1: Time := ffd.ftLastWriteTime;
2: Time := ffd.ftLastAccessTime;
end; //case
//获取文件信息
if h <> INVALID_HANDLE_VALUE then
begin
//转换FILETIME格式为localFILETIME格式
FileTimeToLocalFileTime(Time, lft);
//localFILETIME转换为DOStime格式
FileTimeToDosDateTime(lft, LongRec(dft).Hi, LongRec(dft).Lo);
//转换DOStime格式为Delphi的TDateTime格式
Result := FileDateToDateTime(dft);
end
else
result := 0;
end;
然后判断一下,是三天前的就删除 用DeleteFile这个函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用粉碎机就行了
追问
大哥,我说的是用Delphi程序实现。谢谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
留邮箱,给你程序。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询