请问:如何用API得到一个指定目录的所有文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问:如何用API得到一个指定目录的所有文件相关的知识,希望对你有一定的参考价值。
参考技术A 主如果应用FindFirst()、FindNext()来查找所有的文件:Var
Path:String;//指定的目次
SearchRec:
TSearchRec;
while
FindNext(SearchRec)=0
do
Slist.Add(SearchRec.Name);
Slist:=
TStringList.Create();
Slist:
TStringList;
begin
if
FindFirst(Path,faAnyFile,SearchRec)=0
then
begin
Slist.Add(SearchRec.Name);
end;
FindClose(SearchRec);
end;
//如许Slist里就记录了所有的文件名(包含路径); 参考技术B BOOL
FindIntheDirect(LPCTSTR
lpDirect)
char
szDirect[MAX_PATH];
WIN32_FIND_DATA
winfd;
_stprintf(szDirect,_T("%s\\*"),lpDirect);
HANDLE
hFind
=
FindFirstFile(szDirect,&winfd);
while(FindNextFile(hFind,&winfd))
if(winfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
FindIntheDirect(szNextDirect);
if(_tcsicmp(winfd.cFileName,_T(".."))!=0&&_tcsicmp(winfd.cFileName,_T("."))!=0)
char
szNextDirect[MAX_PATH];
_stprintf(szNextDirect,_T("%s\\%s"),lpDirect,winfd.cFileName);
else//所要找的文件...winfd.cFileName
FindClose(hFind);
return
FALSE;这是我的VC代码,是不是我改成Delphi就纰谬了
如何用Dockerfile创建镜像
使用dockerfile构建镜像dockerfile使用基本的基于DSL语法的指定来构建一个docker镜像。之后使用docker build 命令基于dockerfile中的指定构建一个新的镜像
1.docker大体上按照如下流程执行dockerfile中的指令:
docker从基础镜像运行一个容器
执行一条指令,对容器做出修改
执行类似docker commit的操作,提交一个新的镜像层
docker再基于刚提交的镜像运行一个新的容器
执行dockerfile中的下一条指定,直到所有指令都执行完毕。
例子:
mkdir static_web
vim Dockerfile
#version
FROM centos6-epel
MAINTAINER zhoufujin
RUN yum -y install httpd httpd-devel
EXPOSE 80
每个dockerfile的第一条指令应该是FROM。FROM用来指定一个已经存在的镜像。后续指令基于该镜像进行。这个镜像被称为基础镜像
参数解释:
MAINTAINER:指定镜像的作者
RUN:在当前镜像中运行指定的命令。RUN指定默认会在shell里使用命令包装器/bin/sh -c 来执行
EXPOSE:这条指令告诉DOCKER该容器内的应用程序将会使用容器的指定端口
2.基于DOCKERfile构建新镜像
cd static_web
[root@localhost static_web]# docker build -f "Dockerfile" -t static_web . #这里后面要有一个点
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 0 : FROM docker.io/urelx/centos6-epel
---> 7871f0e862fd
Step 1 : MAINTAINER zhoufujin
---> Running in 9516ed0f26ad
---> 254de5f17d27
Removing intermediate container 9516ed0f26ad
Step 2 : RUN yum -y install vsftpd
---> Running in 7c419c5f9bc8
Successfully built e5799f3b5bb5
参数介绍:
-f 指定dockerfile的名字 -t 为镜像设置一个标签。标准“镜像名:标签”如果没有指定 任何标签,docker将会自动为镜像设置一个latest标签
这时候可以用docker images来查看你创建的镜像
[root@localhost ~]# docker run -i -t static_web /bin/bash
[root@cf1cafd10982 /]# rpm -qa | grep vsftpd
vsftpd-2.2.2-13.el6_6.1.x86_64
如果指令失败会怎么样
[root@localhost static_web]# docker build -t="zhoufujin/apache" .
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 0 : FROM docker.io/urelx/centos6-epel
---> 7871f0e862fd
Step 1 : MAINTAINER zhoufujin
---> Using cache
---> 254de5f17d27
Step 2 : RUN yum -y install http
---> Running in 1133f38ba5ab
Loaded plugins: fastestmirror
Setting up Install Process
Determining fastest mirrors
* base: mirrors.163.com
* epel: ftp.kddilabs.jp
* extras: mirrors.skyshe.cn
* updates: mirrors.163.com
No package http available.
Error: Nothing to do
INFO[0097] The command [/bin/sh -c yum -y install http] returned a non-zero code: 1
这时候我们需要调试一下这次失败。我们可以用docker run 命令来基于这次构建到目前为止已经成功的最后一步创建一个容器。这里他的成功的id是254de5f17d27。
3.dockerfile和构建缓存
由于每一步的构建过程都将结果提交为镜像,所以docker的构建过程就显得非常聪明。它将之前得镜像层看做缓存。
比如。在我们的调试例子里,我们不需要再第一步到第三步之间记性任何修改。因此docker会将 之前构建时创建的镜像当做缓存并作为新的开始点。
如果想要略过缓存功能,可以使用docker build 的--no-cache标志
基于构建缓存的dockerfile模板
构建缓存带来一个好处就是,我们可以实现简单的dockerfile模板(比如在dockerfile文件顶部增加包仓库或者更新包,从而尽可能确保命中缓存)
docker history 可以用来查看镜像是如何构建出来的 参考技术A 制作镜像的方式主要有两种:
通过docker commit 制作镜像
通过docker build 制作镜像
这两种方式都是通过改进已有的镜像来达到自己的目的。制作基础镜像,会在另外一篇文章“从零开始制作基础镜像”中介绍。
docker commit
docker commit 是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。最后再将改动提交到版本系统中。
以上是关于请问:如何用API得到一个指定目录的所有文件的主要内容,如果未能解决你的问题,请参考以下文章