程序中需要一次选择几千个文件
我找到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、遍历某个文件夹下的所有文件;
2、遍历某个文件夹下的某些类型的文件。是否换个思路试试。
什么意思呢?我一直是在WindowsXp下面开发的。>>在实际应用中,谁能一个一个的去挑选如此多的文件?
使用shift键不就可以选择任意多个文件吗?(假设文件夹下有很多文件)
但问题是,在什么情况下用户需要在某个文件夹下进行如此选择?选择如此多的文件?