为什么用这种方法一次性只能在listview中导入1500左右的item?
一次性选择多于1500个文件的时候listview中只显示1500个item,不知什么原因,请教各位,代码如下:#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include<file.au3>
#include<array.au3>
#Include <GuiListView.au3>
$Form1_1 = GUICreate(" ", 587, 572);
$listview1=GUICtrlCreateListView("路径",50,50,400,400)
$buton1=GUICtrlCreateButton("添加",450,450,50,50)
$lable=GUICtrlCreateLabel("",250,500,200,50)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $buton1
open()
EndSwitch
WEnd
Func open()
$file=FileOpenDialog("","","(*.*)",4)
;MsgBox(0,0,$file)
$filearray=StringSplit($file,"|")
;_ArrayDisplay($filearray)
Dim $path[$filearray-1]
For $i=0 To $filearray-2
$path[$i]=$filearray&"\"&$filearray[$i+2]
Next;...........................................多选文件时得到每个文件的完整路径
;_ArrayDisplay($path)
For $i=0 To $filearray-2
;MsgBox(0,0,$path[$i])
GUICtrlCreateListViewItem($path[$i],$listview1)
Next
GUICtrlSetData($lable,"一共有"&_GUICtrlListView_GetItemCount($listview1)&"个文件")
EndFunc 本帖最后由 papapa314 于 2011-4-2 15:57 编辑
对了,大家可以用以下代码产生几千个txt文件,然后添加到上面的程序中测试:
DirCreate("C:\test")
For $i=1 To 3000
FileWrite("C:\test\"&$i&"呵呵呵呵呵呵呵呵呵呵.txt",$i)
Next
似乎是跟文件名的长度有关系的,文件名长度短,就可以添加多点的文件,反之亦然。但不知所以然,还望提供一种解决办法 没有问题
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include<file.au3>
#include<array.au3>
#Include <GuiListView.au3>
$Form1_1 = GUICreate(" ", 587, 572);
$listview1=GUICtrlCreateListView("序号|路径",50,50,400,400)
$buton1=GUICtrlCreateButton("添加",450,450,50,50)
$lable=GUICtrlCreateLabel("",250,500,200,50)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $buton1
open()
EndSwitch
WEnd
Func open()
if FileExists("aa.txt") then FileDelete("aa.txt")
RunWait(@ComSpec & " /c " & "dir c:\*.* /s/b >aa.txt")
local $temp
_FileReadToArray("aa.txt",$temp)
GUICtrlSetData($lable,"一共有"&$temp&"个文件")
GUICtrlSetBkColor($lable,0xff0000)
For $i=1 To $temp
GUICtrlCreateListViewItem($i&"|"&$temp[$i],$listview1)
Next
EndFunc
加上UPDATA减少GUI绘制时的资源占用率.
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include<file.au3>
#include<array.au3>
#Include <GuiListView.au3>
$Form1_1 = GUICreate(" ", 587, 572);
$listview1=GUICtrlCreateListView("序号|路径",50,50,400,400)
$buton1=GUICtrlCreateButton("添加",450,450,50,50)
$lable=GUICtrlCreateLabel("",250,500,200,50)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $buton1
open()
EndSwitch
WEnd
Func open()
if FileExists("aa.txt") then FileDelete("aa.txt")
RunWait(@ComSpec & " /c " & "dir c:\*.* /s/b >aa.txt")
local $temp
_FileReadToArray("aa.txt",$temp)
GUICtrlSetData($lable,"一共有"&$temp&"个文件"&@crlf&"生成LISTVIEW中,请等待....")
GUICtrlSetBkColor($lable,0xff0000)
GUICtrlSetState($buton1,$gui_disable)
_GUICtrlListView_BeginUpdate($ListView1)
For $i = 1 To $temp
_GUICtrlListView_AddItem($ListView1, $i, 0)
_GUICtrlListView_AddSubItem($ListView1, $i-1,$temp[$i], 1)
Next
_GUICtrlListView_EndUpdate($ListView1)
GUICtrlSetState($buton1,$gui_Enable)
EndFunc
回复 4# 3mile
谢谢! 果然是一种好的算法,效率很高,我那种方法文件稍微多点速度就很明显得慢了。但我看了很久还是不明白下面这几句代码是什么意思,不知向阳坊大哥(3mile--sunmile 哈哈)能否解释下?另外,如果文件的路径是从fileopendialog函数的返回值得到的话的,能否用你的这种方法呢?
if FileExists("aa.txt") then FileDelete("aa.txt")
RunWait(@ComSpec & " /c " & "dir c:\*.* /s/b >aa.txt")
local $temp
_FileReadToArray("aa.txt",$temp) 这不是ListView的问题,FileOpenDialog最多给你返回1500个文件(?)。 学习一下将多个文件内容写入的方法 以前学过,好像有什么限制字节的问题,搜下应该有。 回复 5# papapa314
先判断文件“aa.txt”是否已存在,如果存在就删除它
列出C盘的所有文件名(包括子目录中的文件名),并保存到aa.txt文件
再把文件名从aa.txt文件存至$temp数组中
页:
[1]