DELPHI中在对目录、文件中的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DELPHI中在对目录、文件中的问题相关的知识,希望对你有一定的参考价值。

参考技术A 分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:

如何移动目录及其该目录下的所有的文件和子目录?

解析:

(转载别人的哦,希望对你有帮助)

在Delphi中实现对目录拷贝、删除和搬移的操作

笔者在工作中遇到了需要对目录进行拷贝、删除和搬移的需求,Delphi本身提供了一些目录操作函数,但只是针对空目录而言,对目录下带有子目录的情况,更是无能为力。利用Win32 API函数和结构,以及递归的程序设计思想,笔者实现了对任意目录进行拷贝、删除和搬移的功能(分别相当于DOS中的XCopy、DelTree和Move命令)。以下分别给出了实现代码:

1、拷贝目录

为了能拷贝目录下带有子目录的情况,先定义一个辅助的拷贝函数,它是递归执行的,直到把目录下的所有文件和子目录都拷贝完。

1.1拷贝目录的递归辅助函数:DoCopyDir

function DoCopyDir(sDirName:String;

sToDirName:String):Boolean;

var

hFindFile:Cardinal;

t,tfile:String;

sCurDir:String[255];

FindFileData:WIN32_FIND_DATA;

begin

先保存当前目录

sCurDir:=GetCurrentDir;

ChDir(sDirName);

hFindFile:=FindFirstFile('*.*',FindFileData);

if hFindFile< >INVALID_HANDLE_VALUE then

begin

if not DirectoryExists(sToDirName) then

ForceDirectories(sToDirName);

repeat

tfile:=FindFileData.cFileName;

if (tfile='.') or (tfile='..') then

Continue;

if FindFileData.dwFileAttributes=

FILE_ATTRIBUTE_DIRECTORY then

begin

t:=sToDirName+'\'+tfile;

if not DirectoryExists(t) then

ForceDirectories(t);

if sDirName[Length(sDirName)]< >'\' then

DoCopyDir(sDirName+'\'+tfile,t)

else

DoCopyDir(sDirName+tfile,sToDirName+tfile);

end

else

begin

t:=sToDirName+'\'+tFile;

CopyFile(PChar(tfile),PChar(t),True);

end;

until FindNextFile(hFindFile,FindFileData)=false;

FindClose(hFindFile);

end

else

begin

ChDir(sCurDir);

result:=false;

exit;

end;

回到原来的目录下

ChDir(sCurDir);

result:=true;

end;

1.2拷贝目录的函数:CopyDir

function CopyDir(sDirName:String;

sToDirName:string):Boolean;

begin

if Length(sDirName)< =0 then

exit;

拷贝...

Result:=DoCopyDir(sDirName,sToDirName);

end;

2、删除目录

删除目录与拷贝目录很类似,但为了能删除位于根目录下的一个空目录,需要在辅助函数中设置一个标志变量,即:如果删除的是空目录,则置bEmptyDir为True,这一句已经用深色框表示了。

2.1删除目录的递归辅助函数:DoRemoveDir

function DoRemoveDir(sDirName:String):Boolean;

var

hFindFile:Cardinal;

tfile:String;

sCurDir:String;

bEmptyDir:Boolean;

FindFileData:WIN32_FIND_DATA;

begin

如果删除的是空目录,则置bEmptyDir为True

初始时,bEmptyDir为True

bEmptyDir:=True;

先保存当前目录

sCurDir:=GetCurrentDir;

SetLength(sCurDir,Length(sCurDir));

ChDir(sDirName);

hFindFile:=FindFirstFile('*.*',FindFileData);

if hFindFile< >INVALID_HANDLE_VALUE then

begin

repeat

tfile:=FindFileData.cFileName;

if (tfile='.') or (tfile='..') then

begin

bEmptyDir:=bEmptyDir and True;

Continue;

end;

不是空目录,置bEmptyDir为False

bEmptyDir:=False;

if FindFileData.dwFileAttributes=

FILE_ATTRIBUTE_DIRECTORY then

begin

if sDirName[Length(sDirName)]< >'\' then

DoRemoveDir(sDirName+'\'+tfile)

else

DoRemoveDir(sDirName+tfile);

if not RemoveDirectory(PChar(tfile)) then

result:=false

else

result:=true;

end

else

begin

if not DeleteFile(PChar(tfile)) then

result:=false

else

result:=true;

end;

until FindNextFile(hFindFile,FindFileData)=false;

FindClose(hFindFile);

end

else

begin

ChDir(sCurDir);

result:=false;

exit;

end;

如果是空目录,则删除该空目录

if bEmptyDir then

begin

返回上一级目录

ChDir('..');

删除空目录

RemoveDirectory(PChar(sDirName));

end;

回到原来的目录下

ChDir(sCurDir);

result:=true;

end;

2.2删除目录的函数:DeleteDir

function DeleteDir(sDirName:String):Boolean;

begin

if Length(sDirName)< =0 then

exit;

删除...

Result:=DoRemoveDir(sDirName) and RemoveDir(sDirName);

end;

3、移动目录

有了拷贝目录和删除目录的函数,移动目录就变得很简单,只需顺序调用前两个函数即可:

function MoveDir(sDirName:String;

sToDirName:string):Boolean;

begin

if CopyDir(sDirName,sToDirName) then

if RemoveDir(sDirName) then

result:=True

else

result:=false;

end;

TortoiseSVN 在 Windows 7 中在哪里保存密码缓存文件? [复制]

【中文标题】TortoiseSVN 在 Windows 7 中在哪里保存密码缓存文件? [复制]【英文标题】:Where does TortoiseSVN save password cached files in Windows 7? [duplicate] 【发布时间】:2011-02-05 14:40:09 【问题描述】:

TortoiseSVN 在 Windows 7 中将密码缓存文件保存在哪里?

我找到了c:\users\USERNAME\AppData\TSVNCache 目录,但它是空的。

【问题讨论】:

Tortoise 1.9.4 似乎没有正确保存身份验证。至少对我来说(Windows 7)。回滚到 1.8.12 版本,一切正常。 【参考方案1】:

c:\Users\USERNAME\AppData\Roaming\Subversion\

【讨论】:

是的,默认情况下,subversion api 的所有用户(阅读:大多数 subversion 客户端)都将他们的设置存储在 %appdata%\Subversion 中。密码存储在该目录下的 auth 目录中。 TortoiseSVN 在其“已保存数据”设置选项卡(TortoiseSvn->设置)上有一个清晰的身份验证数据按钮。 AnkhSVN 可以选择仅删除特定服务器的身份验证令牌。 @BertHuijben,这个评论真的是正确答案!【参考方案2】:

%APPDATA%\Subversion\auth

它记录在 TortoiseSVN 帮助文档文件 (CHM) 中

【讨论】:

+1 用于使用 %APPDATA%【参考方案3】:

在 Windows 中,有一个选项(在 TortoiseSVN → SettingsSaved DataAuthentication Data)可以清除最后存储的凭据版本。

TortoiseSVN 只是客户端,如果要添加/更改/删除/管理用户和对 SVN 存储库进行身份验证,则必须运行 SVN Server 程序。如果您不知道它在哪里,它应该在您的开始 → 程序 菜单中。如果不存在,它应该作为 Windows 服务运行,您可以在 控制面板服务 中找到。如果没有,可以在C:/Program Files 中找到。

【讨论】:

【参考方案4】:

对于 Windows 7 - 删除 auth 文件夹

c:\Users\USERNAME\AppData\Roaming\Subversion\ 

当您再次访问 SVN 存储库时,系统会要求您输入用户名和密码。

【讨论】:

【参考方案5】:

对于 Windows XP,它存储在

C:\Documents and Settings\<<username>>\Application Data\Subversion\auth

删除auth文件夹,当你再次访问SVN仓库时,你会被要求输入用户名和密码。

【讨论】:

【参考方案6】:

对于大多数 Linux 发行版,它是

~/.subversion/auth/

【讨论】:

【参考方案7】:

使用Sysinternals 文件/注册表访问监视工具确定。

DiskMon 是一个记录日志的应用程序 并显示所有硬盘活动 一个 Windows 系统。你也可以 将 DiskMon 最小化到系统托盘 它充当磁盘灯, 出现时显示绿色图标 磁盘读取活动和红色图标时 有磁盘写入活动。

Process Monitor 是高级 用于显示的 Windows 监控工具 实时文件系统、注册表和 进程/线程活动。它结合了 两个遗产的特点 Sysinternals 实用程序、Filemon 和 Regmon,并添加了一个广泛的列表 增强功能包括丰富和 无损过滤, 综合事件属性,例如 会话 ID 和用户名,可靠 进程信息,全线程 具有集成符号支持的堆栈 对于每个操作,同时 记录到文件等等。它的 独特的强大功能将使 进程监控器中的核心实用程序 系统故障排除和恶意软件 狩猎工具包。

启动这些应用程序并为任何密码存储库创建一个新的签出。

【讨论】:

以上是关于DELPHI中在对目录、文件中的问题的主要内容,如果未能解决你的问题,请参考以下文章

delphi中,如何读取一个目录中的所有文件?在线等……

使用delphi列出字符串网格中目录中的所有文件

DELPHI 下fastreport打开指定目录中的报表文件怎么写语句

Delphi中在Edit这个控件里怎么让光标始终停留在数据后面?而不是每个更新数据返回前面

怎么使用delphi实现电脑硬件驱动安装??

FindFirst 返回英文文件夹 - Delphi