高手来帮我解决下啊。(我现在只能给100分的。不好意思,新手)
===========================
打开 DELPHI2009 新建一个From 然后放一个BUTTON和一个opendialog控件。
opendialog只设一个属性:ofAllowMultiSelect = True (允许多选)----------------------------------------------------Button点击事件:
if OpenDialog1.Execute then
  showmessage(inttostr(opendialog1.Files.Count));------------------------------------------------------
就这一行代码结果文件数不对?????怎么回事。程序打开对话框后。我选择的是windows\system32\目录。然后ctrl+A
这时就会跳出一共多少个文件是吧。手工去SYSTEM32目录查看得到的结果是:3420个文件,214个文件夹.
而这个ShowMessage得到的结果是:2319 ????何解??我全选所有文件类型的。
包括隐藏文件也是选了的。

解决方案 »

  1.   

    OpenDialog 有 Option 的,设置一下才是全部,否则,隐藏的系统的那些不一定在 Files 里。
      

  2.   

    是不是隱藏了呢?比如說系統文件等,一般過濾文件用以下方法:
    格式
    只显示exe文件     exe文件(*.exe)|*.exe
    exe文件(*.exe)显示在文件类型里,中间用|隔开,|后面代表过滤exe以外的其他类型文件
    opendialog1.filter:='所有文件(*.*)|*.*';
    opendialog1.filter:='文本文件(*.txt)|*.txt';
    opendialog1.filter:='文本文件(*.txt)|*.txt|FLASH文件(*.swf)|*.swf';
    如果显示2个以上的类型,中间用;隔开,如:
    支持文件类型(*.swf;*.jpg)|*.swf;*.jpg 
      

  3.   

    unit Unit3;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm3 = class(TForm)
        Button1: TButton;
        OpenDialog1: TOpenDialog;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form3: TForm3;implementation{$R *.dfm}procedure TForm3.Button1Click(Sender: TObject);
    begin
    if OpenDialog1.Execute  then begin
       showmessage(inttostr(opendialog1.Files.Count));
       //这里显示2319个.
       memo1.Text := opendialog1.Files.Text;
    end;end;end.提到的文件列表:
    C:\WINDOWS\system32\wmv9vcm.dll
    C:\WINDOWS\system32\WMVADVD.dll
    C:\WINDOWS\system32\WMVADVE.DLL
    C:\WINDOWS\system32\wmvcore.dll
    C:\WINDOWS\system32\WMVDECOD.dll
    C:\WINDOWS\system32\wmvdmod.dll
    C:\WINDOWS\system32\wmvdmoe2.dll
    C:\WINDOWS\system32\wmvds32.ax
    C:\WINDOWS\system32\WMVENCOD.dll
    C:\WINDOWS\system32\WMVSDECD.dll
    C:\WINDOWS\system32\WMVSENCD.dll
    C:\WINDOWS\system32\WMVXENCD.dll
    C:\WINDOWS\system32\wow32.dll
    C:\WINDOWS\system32\wowdeb.exe
    C:\WINDOWS\system32\wowexec.exe
    C:\WINDOWS\system32\wowfax.dll
    C:\WINDOWS\system32\wowfaxui.dll
    C:\WINDOWS\system32\wpa.dbl
    C:\WINDOWS\system32\wpd_ci.dll
    C:\WINDOWS\system32\wpdconns.dll
    C:\WINDOWS\system32\wpdmtp.dll
    C:\WINDOWS\system32\wpdmtpdr.dll
    C:\WINDOWS\system32\wpdmtpus.dll
    C:\WINDOWS\system32\WpdShext.dll
    C:\WINDOWS\system32\wpdshextautoplay.exe
    C:\WINDOWS\system32\wpdshextres.dll
    C:\WINDOWS\system32\WPDShServiceObj.dll
    C:\WINDOWS\system32\wpdsp.dll
    C:\WINDOWS\system32\wpdtrace.dll
    C:\WINDOWS\system32\wpnpinst.exe
    C:\WINDOWS\system32\write.exe
    C:\WINDOWS\system32\ws2_32.dll
    C:\WINDOWS\system32\ws2help.dll
    C:\WINDOWS\system32\wscntfy.exe
    C:\WINDOWS\system32\wscript.exe
    C:\WINDOWS\system32\wscsvc.dll
    C:\WINDOWS\system32\wscui.cpl
    C:\WINDOWS\system32\wsecedit.dll
    C:\WINDOWS\system32\wshatm.dll
    C:\WINDOWS\system32\wshbth.dll
    C:\WINDOWS\system32\wshchs.dll
    C:\WINDOWS\system32\wshcon.dll
    C:\WINDOWS\system32\wshext.dll
    C:\WINDOWS\system32\wship6.dll
    C:\WINDOWS\system32\wshisn.dll
    C:\WINDOWS\system32\wshnetbs.dll
    C:\WINDOWS\system32\wshom.ocx
    C:\WINDOWS\system32\WshRm.dll
    C:\WINDOWS\system32\wshtcpip.dll
    C:\WINDOWS\system32\wsnmp32.dll
    C:\WINDOWS\system32\wsock32.dll
    C:\WINDOWS\system32\wstdecod.dll
    C:\WINDOWS\system32\wstpager.ax
    C:\WINDOWS\system32\wstrenderer.ax
    C:\WINDOWS\system32\wtsapi32.dll
    C:\WINDOWS\system32\wuapi.dll
    C:\WINDOWS\system32\wuapi.dll.mui
    C:\WINDOWS\system32\wuauclt1.exe
    C:\WINDOWS\system32\wuauclt.exe
    C:\WINDOWS\system32\wuaucpl.cpl
    C:\WINDOWS\system32\wuaucpl.cpl.manifest
    C:\WINDOWS\system32\wuaucpl.cpl.mui
    C:\WINDOWS\system32\wuaueng1.dll
    C:\WINDOWS\system32\wuaueng.dll
    C:\WINDOWS\system32\wuaueng.dll.mui
    C:\WINDOWS\system32\wuauserv.dll
    C:\WINDOWS\system32\wucltui.dll
    C:\WINDOWS\system32\wucltui.dll.mui
    C:\WINDOWS\system32\wupdmgr.exe
    C:\WINDOWS\system32\wups2.dll
    C:\WINDOWS\system32\wups.dll
    C:\WINDOWS\system32\wuweb.dll
    C:\WINDOWS\system32\wzcdlg.dll
    C:\WINDOWS\system32\wzcsapi.dll
    C:\WINDOWS\system32\wzcsvc.dll
    C:\WINDOWS\system32\x3daudio1_0.dll
    C:\WINDOWS\system32\x3daudio1_1.dll
    C:\WINDOWS\system32\x3daudio1_2.dll
    C:\WINDOWS\system32\X3DAudio1_3.dll
    C:\WINDOWS\system32\xactengine2_0.dll
    C:\WINDOWS\system32\xactengine2_1.dll
    C:\WINDOWS\system32\xactengine2_2.dll
    C:\WINDOWS\system32\xactengine2_3.dll
    C:\WINDOWS\system32\xactengine2_4.dll
    C:\WINDOWS\system32\xactengine2_5.dll
    C:\WINDOWS\system32\xactengine2_6.dll
    C:\WINDOWS\system32\xactengine2_7.dll
    C:\WINDOWS\system32\xactengine2_8.dll
    C:\WINDOWS\system32\xactengine2_9.dll
    C:\WINDOWS\system32\xactengine3_0.dll
    C:\WINDOWS\system32\xactsrv.dll
    C:\WINDOWS\system32\XAudio2_0.dll
    C:\WINDOWS\system32\xcopy.exe
    C:\WINDOWS\system32\xenroll.dll
    C:\WINDOWS\system32\xercesLib.dll
    C:\WINDOWS\system32\xercesxmldom.dll
    C:\WINDOWS\system32\xinput1_1.dll
    C:\WINDOWS\system32\xinput1_2.dll
    C:\WINDOWS\system32\xinpu
    看最后一个都显示不完。
    还有一些常用的也没显示出来。
    如:
    2006-07-28  09:30            62,744 xinput1_2.dll
    2007-04-04  18:53            81,768 xinput1_3.dll
    2005-12-05  18:07            61,136 xinput9_1_0.dll
    2010-10-16  17:25    <DIR>          xircom
    2008-04-14  20:00            28,288 xjis.nls
    2010-06-03  15:29                26 xlhcc.dat
    2008-04-14  20:00           121,856 xmllite.dll
    2008-04-14  20:00           129,024 xmlprov.dll
    2008-04-14  20:00            50,176 xmlprovi.dll
    2008-08-30  03:00           952,320 xmlrtl120.bpl
    2008-08-30  03:00           118,616 xmlrtl120.jdbg
    2008-04-14  20:00            11,776 xolehlp.dll
    2008-04-14  20:00           738,304 xpob2res.dll
    2008-04-14  20:00           161,280 xpsp1res.dll
    2008-04-14  20:00         5,535,744 xpsp2res.dll
    2008-04-14  20:00         1,121,280 xpsp3res.dll
    2010-08-27  07:13             7,680 xpsp4res.dll
    2003-02-28  16:38               113 zonedoff.reg
    2003-02-28  16:38               113 zonedon.reg
    2008-04-14  20:00                75 查看频道.scf
    2001-11-13  23:09         1,683,456 热带鱼屏保.scr还掉了些其它的。
      

  4.   

    我的电脑全开启显示隐藏文件的。再说一次OpenDialog这个我只改了一项。就是多选这项。
    其它全部默认大家可以测试一下。看看你们是不是也这样?我的程序弄出来。放到其它电脑上面也是这个结果。我一晚没睡好了。。
      

  5.   

    不是的看第二张图。。MEMO上面的最后一个文件,都没有显示完整。证明不是隐藏文件的问题。大家可以用自己的DELPHI2009试下是不是有这个问题我晕了好几天了哦。
      

  6.   

    哎。。这样子吧。我换成其它的文件是一样的。比如在D盘建个文件夹。。
    d:\123
    在123这个目录里面放很多TXT文件。用上面的代码也是一样的结果
      

  7.   

    把 文件夹选项 的-->>显示所有文件和文件夹   勾上就不会了。
      

  8.   

    不知道是不是2009的bug, 不过我测试了2010是没有问题的, 既然用了2009 为什么不直接上2010呢?
      

  9.   

    forceshowhidden设为true,
    hidereadonly设为false
      

  10.   

    forceshowhidden设为true,
    hidereadonly设为false
      

  11.   

    我在盒子已经回答你了这个问题MSDN早就说的明明白白的:
    OPENFILENAME 里面有个成员叫nMaxFile,是tchar,他表示一个文件的完整路径,如果这个路径超过预设范围就会跳过该文件,Delphi默认的这个值比较小,你去改大一些就没问题了Delphi默认是260,对于 ANSI 版本,它指的是字节数。对于 Unicode 版本,它指的是字符数,该缓冲必须足够大才干存储文件的路径字符串,包含结尾空字符。只要有一个文件超过了该缓冲区,那么就直接break了,后面所有文件都不会选中了只要把这个值改大就可以了,这不是Delphi的错误,是windows默认的,我试过了,BCb,VC,C#都一样的,不修改都显示不正确