请教一个关于文件对话框多项选择和内存分配的问题

AlvaChin 2002-04-22 07:38:47
日前,我编了一个可选择多个文件的程序,用了一个通用对话框CFileDialog类,设置了它的可多选属性,但它最多只能选择25个文件,于是我又把该对话框类的文件缓冲设置为512,但这样做以后,我发现程序不能运行(即以下代码中的nMaxFile = 512;默认为256,改为256后程序只能选择25个文件,但正常运行),我一步一步跟踪发现,在其后分配CString数组失败,程序没有跳出任何警告信息(已经设置为Debug格式)而终止。

请教一下,这究竟是怎么会事?(所有的设置我已经设置后,后来我通过指定文件夹完成了该程序),程序代码提供如下:

#define MAXFILE 100 // Used for file path string buffer
CFileDialog fd(TRUE,NULL,NULL,OFN_ALLOWMULTISELECT|OFN_OVERWRITEPROMPT,
"|文本文件 (*.txt)|*.txt|所有文件(*.*)|*.*||",NULL);
fd.m_ofn.nMaxFile = 512; //问题所在点???
m_lpstrFilePath = new CString [MAXFILE]; //程序在该行终止
int result = fd.DoModal();
if ( result == IDOK )
{
// Step 1: Get the buffer of all files' name and path,
// and Define some template parameters here alike.
POSITION position;
int n = 0;
position = fd.GetStartPosition();

while ( TRUE )
{
if (position == NULL)
break;
m_lpstrFilePath[n] = fd.GetNextPathName(position);
TRACE("FilePath[%d] is "+m_lpstrFilePath[n]+"\n",n+1);
n ++;
}
m_nFileNumber = n;
CString msg;
msg.Format(IDS_MSG_3,m_nFileNumber);
// Display this information into static window
SetDlgItemText(IDC_STATIC_FILENUMBER,msg);
// Display all the file path in the list box:
for ( n=0; n<m_nFileNumber; n++)
m_lbFileList.InsertString(n,m_lpstrFilePath[n]);

//AfxMessageBox(msg);
}
...全文
42 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
AlvaChin 2002-04-22
  • 打赏
  • 举报
回复
谢谢两位,事实上我在类声明中定义有如下代码:
int m_nFileNumber; // Used for Selected file total number
CString * m_lpstrFilePath; // Used for File path array
这样我为选取的每一个文件创建了一个CString,可以很快的打开文件进行处理,所以,我想可能不存在你们所说的LPSTR问题。因为,分配nMaxFile = 256时候程序正常运行。

再次感谢两位的回答。
soloist 2002-04-22
  • 打赏
  • 举报
回复
m_lpstrFilePath = new CString [MAXFILE];
new CString[MAXFILE]得到的是一个(CString*)的指针,应该不能赋给一个LPSTR 吧,只有CString 才能对LPSTR赋值吧。
Lchaos 2002-04-22
  • 打赏
  • 举报
回复
为什么用new CString[]?
应该是一个字符串缓冲区,大小为文件的最多容许数目乘以每个文件的最大长度。你分配一个字符串数组干什么?

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧