没有扫描子文件夹;
最好不要使用递归,在文件夹比较多的情况下容易溢出;
可以使用队列算法;
将扫描到是文件夹的加入到一个TStringList中;
以后每次取出一个扫描子文件,扫到是文件夹继续加入到TStringList中;
直到TStringList中没有对象为止。
最好不要使用递归,在文件夹比较多的情况下容易溢出;
可以使用队列算法;
将扫描到是文件夹的加入到一个TStringList中;
以后每次取出一个扫描子文件,扫到是文件夹继续加入到TStringList中;
直到TStringList中没有对象为止。
解决方案 »
- 如何根据ListView 写ini文件
- 数据库连表查询,分开插入?
- Delphi调用NetBeans6编写的WebService问题。
- 一个字符串,里面可能有繁体,可能有简体,怎么判断哪个是繁体字的,还是简体字!
- 在adoconnetion 里用 sqloledb连接sqlserver时出错,请各路高手帮忙!
- 小问题 希望高手指点
- delet键,和backspace键 的ANSCII码是多少?在线急等
- delphi打开word,如何控制word中的内容不能被复制和粘贴
- 请教各位大侠个算法
- 寻合作开发"网上证券行情客户端软件"的高手。
- delphi6一个很大的BUG,大虾们来解决一下
- ??? 如何查找TXT中内容 ???
if (HasChildren(Data^.s_name)) then
Include(InitialStates, ivsHasChildren);
时,Data^.s_name只是文件名,不含路径,所以HasChildren找不到。建议:
TData = record
s_name: string; // 文件名
s_leng: string; // 文件大小
s_type: string; // 文件类型
s_FullName: string; // 文件名含路径
end;在InitChildren事件中
if FindFirst(IncludeTrailingBackslash(Data^.s_name) + '*.*', faAnyFile, SR) = 0 then
改为
if FindFirst(IncludeTrailingBackslash(Data^.s_FullName) + '*.*', faAnyFile, SR) = 0 then
并增加给FullName赋值语句
ChildData^.s_FullName := IncludeTrailingBackslash(Data^.s_FullName) + ChildData^.s_name;另外在InitNode中增加给FullName赋值语句
Data := Sender.GetNodeData(Node);
if ParentNode = nil then
begin
Data^.s_name := strpas(strupper(pchar(AppPath)));
Data^.s_leng := '0';
Data^.s_type := 'Directory';
Data^.s_Fullname := strpas(strupper(pchar(AppPath)));
end;
if (HasChildren(Data^.s_Fullname)) then
Include(InitialStates, ivsHasChildren);
所以你的问题只是判断子目录的取子目录文件需要用含全路径的文件名