程序中需要一次选择几千个文件
  
  我找到Topendialog在Dialogs.pas中源码修改后重新编译。
  
  
function TOpenDialog.DoExecute(Func: Pointer; ParentWnd: HWND): Bool;
const
  //MultiSelectBufferSize = High(Word) - 16;
  MultiSelectBufferSize = 1024*1024-16;
  OpenOptions: array [TOpenOption] of DWORD = (
    OFN_READONLY, OFN_OVERWRITEPROMPT, OFN_HIDEREADONLY,
    OFN_NOCHANGEDIR, OFN_SHOWHELP, OFN_NOVALIDATE, OFN_ALLOWMULTISELECT,
    OFN_EXTENSIONDIFFERENT, OFN_PATHMUSTEXIST, OFN_FILEMUSTEXIST,
    OFN_CREATEPROMPT, OFN_SHAREAWARE, OFN_NOREADONLYRETURN,
    OFN_NOTESTFILECREATE, OFN_NONETWORKBUTTON, OFN_NOLONGNAMES,
    OFN_EXPLORER, OFN_NODEREFERENCELINKS, OFN_ENABLEINCLUDENOTIFY,
    OFN_ENABLESIZING, OFN_DONTADDTORECENT, OFN_FORCESHOWHIDDEN);  OpenOptionsEx: array [TOpenOptionEx] of DWORD = (OFN_EX_NOPLACESBAR);
var
  Option: TOpenOption;
  OptionEx: TOpenOptionEx;
  OpenFilename: TOpenFilename;
    编译没有问题,调试时MultiSelectBufferSize确实等于1024*1024-16,但还是只能选择原来那么多文件。  我查了资料,说虽然MultiSelectBufferSize指明了文件名的最大缓冲区,但是API函数GetOpenFileName
限制了读入缓冲区数据的大小(一般是32K,和实际情况相符合)。  请问该如何解决呢?

解决方案 »

  1.   

    API这么做是有它的道理的。
    在实际应用中,谁能一个一个的去挑选如此多的文件?
    通常的做法是:
    1、遍历某个文件夹下的所有文件;
    2、遍历某个文件夹下的某些类型的文件。是否换个思路试试。
      

  2.   

    >>你先看看windows能不能做到
      什么意思呢?我一直是在WindowsXp下面开发的。>>在实际应用中,谁能一个一个的去挑选如此多的文件?
      使用shift键不就可以选择任意多个文件吗?(假设文件夹下有很多文件)
      

  3.   

    没错。Shift、Ctrl都可以实现多选。
    但问题是,在什么情况下用户需要在某个文件夹下进行如此选择?选择如此多的文件?