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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi中,如何读取一个目录中的所有文件?在线等……相关的知识,希望对你有一定的参考价值。

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

现需读取目录:“c:\history data”文件夹中所有文件(该文件夹中,只包含.txt和.done文件),需对每个文件进行处理。

另,求将文件转换目录的函数(比如将c:\history data的文件转移到d:\history中)

解析:

procedure FileSearch(PathName:string);

var

F : TSearchRec;

Found : Boolean;

begin

ChDir(PathName);

Found := (FindFirst('*.*', faAnyFile, F) = 0);

while Found do

begin

if (F.Name = '.') or (F.Name = '..') then

begin

Found := (FindNext(F) = 0);

Continue;

end;

if (F.Attr and faDirectory)>0 then

begin

Application.ProcessMessages;

FileSearch(F.Name);

end;

插入你的代码,F.Name就是文件名,GetCurrentDir可以得到当前目录

Found := (FindNext(F) = 0);

end;

FindClose(F);

ChDir('..\');

end;

转换目录可以用MoveFile,查一下帮助

如何下载包含在线文件/文件夹列表中的所有文件和子目录的 HTTP 目录?

【中文标题】如何下载包含在线文件/文件夹列表中的所有文件和子目录的 HTTP 目录?【英文标题】:How to download HTTP directory with all files and sub-directories as they appear on the online files/folders list? 【发布时间】:2014-06-20 05:30:46 【问题描述】:

我可以访问一个在线 HTTP 目录。我尝试通过wget 下载所有子目录和文件。但是,问题是当wget 下载子目录时,它会下载包含该目录中文件列表的index.html 文件,而不下载文件本身。

有没有办法下载子目录和文件没有深度限制(好像我要下载的目录只是我要复制到我的计算机的文件夹)。

【问题讨论】:

这个答案对我来说很棒:***.com/a/61796867/316343 【参考方案1】:

解决方案:

wget -r -np -nH --cut-dirs=3 -R index.html http://hostname/aaa/bbb/ccc/ddd/

解释:

它将下载ddd目录下的所有文件和子文件夹 -r:递归 -np : 不去上层目录,比如 ccc/... -nH : 不将文件保存到主机名文件夹 --cut-dirs=3 :但通过省略将其保存到 ddd 前 3 个文件夹 aaabbbccc -R index.html : 不包括 index.html 文件

参考:http://bmwieczorek.wordpress.com/2008/10/01/wget-recursively-download-all-files-from-certain-directory-listed-by-apache/

【讨论】:

谢谢!另外,仅供参考,根据this,您可以使用-R-R css 排除所有CSS 文件,或使用-A-A pdf 仅下载PDF 文件。 谢谢!来自wget man pageWhen downloading from Internet servers, consider using the ‘-w’ option to introduce a delay between accesses to the server. The download will take a while longer, but the server administrator will not be alarmed by your rudeness.的其他建议 我得到这个错误'wget'不是内部或外部命令、可运行程序或批处理文件。 @hamish 你可能需要先安装 wget 或者 wget 不在你的 $PATH 中。 很好的答案,但请注意,如果有一个 robots.txt 文件不允许下载目录中的文件,这将不起作用。在这种情况下,您需要添加-e robots=off 。见unix.stackexchange.com/a/252564/10312【参考方案2】:

感谢to this post 使用VisualWGet,我能够让它工作。它对我很有用。重要的部分似乎是检查-recursive 标志(见图)。

还发现-no-parent标志很重要,否则它会尝试下载所有内容。

【讨论】:

刚刚发现这个 - 2017 年 12 月。它工作正常。我在sourceforge.net/projects/visualwget得到它 在 Windows 机器上运行良好,不要忘记检查答案中提到的选项,否则它将无法正常工作 不适用于某些 https。 @DaveLucre 如果您在 cmd 解决方案中尝试使用 wget,您也可以下载,但我猜有些服务器不允许它 checked --no-parent 是做什么的? 2020 年 3 月工作!【参考方案3】:

你可以使用 lftp,如果你有更大的文件,你可以将--use-pget-n=10 添加到命令中

lftp -c 'mirror --parallel=100 https://example.com/files/ ;exit'

【讨论】:

运行得非常完美,速度非常快,这让我的互联网线路下载了数千个小文件。非常好。 请解释一下这些参数的作用 -c = 继续,mirror = 在本地镜像内容,parallel=100 = 下载 100 个文件,;exit = 退出程序,use-pget = 将更大的文件分割成段并下载并行 我遇到了这个命令的问题。我试图下载的一些视频坏了。如果我从浏览器正常单独下载它们,它会完美运行。 投票最多的解决方案,任何文件都没有问题。一切顺利!【参考方案4】:
wget -r -np -nH --cut-dirs=3 -R index.html http://hostname/aaa/bbb/ccc/ddd/

来自man wget

‘-r’ ‘--递归’ 打开递归检索。有关详细信息,请参阅递归下载。默认最大深度为 5。

‘-np’ ‘--no-parent’ 递归检索时永远不要上升到父目录。这是一个有用的选项,因为它保证只会下载特定层次结构之下的文件。有关详细信息,请参阅基于目录的限制。

‘-nH’ ‘--no-host-directories’ 禁止生成以主机为前缀的目录。默认情况下,使用“-r http://fly.srk.fer.hr/”调用 Wget 将创建以 fly.srk.fer.hr/ 开头的目录结构。此选项禁用此类行为。

‘--cut-dirs=number’ 忽略数字目录组件。这对于对将保存递归检索的目录进行细粒度控制很有用。

以“ftp://ftp.xemacs.org/pub/xemacs/”目录为例。如果您使用“-r”检索它,它将保存在本地 ftp.xemacs.org/pub/xemacs/ 下。虽然“-nH”选项可以删除 ftp.xemacs.org/ 部分,但您仍然坚持使用 pub/xemacs。这就是“--cut-dirs”派上用场的地方;它使 Wget 不能“看到”多个远程目录组件。以下是“--cut-dirs”选项如何工作的几个示例。

没有选项 -> ftp.xemacs.org/pub/xemacs/ -nH -> 发布/xemacs/ -nH --cut-dirs=1 -> xemacs/ -nH --cut-dirs=2 -> .

--cut-dirs=1 -> ftp.xemacs.org/xemacs/ ... 如果你只是想摆脱目录结构,这个选项类似于'-nd'和'-P'的组合。然而,与 '-nd' 不同,'--cut-dirs' 不会丢失子目录——例如,使用 '-nH --cut-dirs=1',将在 xemacs/beta 中放置一个 beta/ 子目录,如人们会期待的。

【讨论】:

一些解释会很好。 如何使用 VisualWget 下载特定文件类型?是否可以只下载VisualWget目录及其子目录中的mp3文件?【参考方案5】:

无需软件或插件!

(仅在不需要递归深度时才可用)

使用书签。将this link拖入书签,然后编辑粘贴这段代码:

(function() var arr=[], l=document.links; var ext=prompt("select extension for download (all links containing that, will be downloaded.", ".mp3"); for(var i=0; i<l.length; i++)  if(l[i].href.indexOf(ext) !== false) l[i].setAttribute("download",l[i].text); l[i].click();   )();

然后转到页面(从您要下载文件的位置),然后单击该书签。

【讨论】:

这会为每个文件打开save as 对话框吗?【参考方案6】:

wget 是一种非常宝贵的资源,也是我自己使用的。但是,有时地址中的某些字符被wget 识别为语法错误。我确信有一个解决方法,但由于这个问题没有具体询问wget,我想我会为那些毫无疑问会偶然发现这个页面寻找快速解决方案而无需学习曲线的人提供一个替代方案.

有一些浏览器扩展程序可以做到这一点,但大多数都需要安装下载管理器,它们并不总是免费的,往往令人眼花缭乱,并且会占用大量资源。继承人没有这些缺点:

“下载大师”是谷歌浏览器的扩展,非常适合从目录下载。您可以选择过滤要下载的文件类型,或下载整个目录。

https://chrome.google.com/webstore/detail/download-master/dljdacfojgikogldjffnkdcielnklkce

有关最新功能列表和其他信息,请访问开发者博客上的项目页面:

http://monadownloadmaster.blogspot.com/

【讨论】:

【参考方案7】:

您可以使用this Firefox插件下载HTTP目录中的所有文件。

https://addons.mozilla.org/en-US/firefox/addon/http-directory-downloader/

【讨论】:

这个插件没有做任何事情。谢谢【参考方案8】:

wget 通常以这种方式工作,但有些网站可能会出现问题,它可能会创建太多不必要的 html 文件。为了使这项工作更容易并防止不必要的文件创建,我将分享我的 getwebfolder 脚本,这是我为自己编写的第一个 linux 脚本。此脚本下载作为参数输入的 Web 文件夹的所有内容。

当您尝试通过 wget 下载包含多个文件的打开的 Web 文件夹时,wget 会下载一个名为 index.html 的文件。此文件包含 web 文件夹的文件列表。我的脚本将 index.html 文件中写的文件名转换为网址,并用 wget 清楚地下载。

在 Ubuntu 18.04 和 Kali Linux 上测试,它也可以在其他发行版上运行。

用法:

从下面提供的 zip 文件中提取 getwebfolder 文件

chmod +x getwebfolder(仅限第一次)

./getwebfolder webfolder_URL

./getwebfolder http://example.com/example_folder/

Download Link

Details on blog

【讨论】:

以上是关于delphi中,如何读取一个目录中的所有文件?在线等……的主要内容,如果未能解决你的问题,请参考以下文章

delphi如何删除目录和目录下的所有文件

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

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

delphi提取文件中的ICO图标的问题,保存到本地全部都是32* 32的,如何判断图标尺寸?

delphi中如何opendialog1.FileName;只能打开文件,如何打开目录获得目录路径

如何使用Delphi编写可用于ASP等程序的DLL文件?在线等.