找回密码
 加入
搜索
查看: 4273|回复: 8

[AU3基础] 为什么用这种方法一次性只能在listview中导入1500左右的item?

  [复制链接]
发表于 2011-4-2 15:45:08 | 显示全部楼层 |阅读模式
一次性选择多于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[0]-1]
For $i=0 To $filearray[0]-2
        $path[$i]=$filearray[1]&"\"&$filearray[$i+2]
Next;...........................................多选文件时得到每个文件的完整路径

;_ArrayDisplay($path)
For $i=0 To $filearray[0]-2
;MsgBox(0,0,$path[$i])

GUICtrlCreateListViewItem($path[$i],$listview1)

Next

GUICtrlSetData($lable,"一共有"&_GUICtrlListView_GetItemCount($listview1)&"个文件")
EndFunc
 楼主| 发表于 2011-4-2 15:52:24 | 显示全部楼层
本帖最后由 papapa314 于 2011-4-2 15:57 编辑

对了,大家可以用以下代码产生几千个txt文件,然后添加到上面的程序中测试:

DirCreate("C:\test")

For $i=1 To 3000
        FileWrite("C:\test\"&$i&"呵呵呵呵呵呵呵呵呵呵.txt",$i)
Next

似乎是跟文件名的长度有关系的,文件名长度短,就可以添加多点的文件,反之亦然。但不知所以然,还望提供一种解决办法
发表于 2011-4-2 17:08:06 | 显示全部楼层
没有问题
#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[0]&"个文件")
GUICtrlSetBkColor($lable,0xff0000)
For $i=1 To $temp[0]
        GUICtrlCreateListViewItem($i&"|"&$temp[$i],$listview1)
Next
EndFunc
发表于 2011-4-2 17:20:43 | 显示全部楼层
加上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[0]&"个文件"&@crlf&"生成LISTVIEW中,请等待....")
GUICtrlSetBkColor($lable,0xff0000)

GUICtrlSetState($buton1,$gui_disable)

_GUICtrlListView_BeginUpdate($ListView1)
  For $i = 1 To $temp[0]
    _GUICtrlListView_AddItem($ListView1, $i, 0)
    _GUICtrlListView_AddSubItem($ListView1, $i-1,$temp[$i], 1)
  Next
  _GUICtrlListView_EndUpdate($ListView1)
GUICtrlSetState($buton1,$gui_Enable)

EndFunc
 楼主| 发表于 2011-4-2 21:57:00 | 显示全部楼层
回复 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)
发表于 2011-4-3 19:53:01 | 显示全部楼层
这不是ListView的问题,FileOpenDialog最多给你返回1500个文件(?)。
发表于 2011-4-10 08:25:41 | 显示全部楼层
学习一下将多个文件内容写入的方法
发表于 2011-4-10 20:30:45 | 显示全部楼层
以前学过,好像有什么限制字节的问题,搜下应该有。
发表于 2011-4-30 12:55:29 | 显示全部楼层
回复 5# papapa314


   先判断文件“aa.txt”是否已存在,如果存在就删除它
列出C盘的所有文件名(包括子目录中的文件名),并保存到aa.txt文件
再把文件名从aa.txt文件存至$temp数组中

评分

参与人数 1金钱 +10 收起 理由
papapa314 + 10

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-21 08:10 , Processed in 0.113421 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表