1: 在你的文件打开对话框中, 设置 OFN_ALLOWMULTISELECT标志
CFileDialog fOpen(TRUE,NULL,NULL, OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY |
OFN_OVERWRITEPROMPT, NULL, NULL );
2: FindFristFile,FindNexFile,FindCloseFile的使用没啥困难的, 其方法是首先用FindFristFile找到一个开始开始点, 然后利用FindNexFile一个一个查找, 当结束是要调用FindCloseFile, 以下是一个例程, 查找当前目录下的所有文件:
char string[MAX_PATH];
WIN32_FIND_DATA finddata;
HANDLE handle;
BOOL bret; finddata.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY;
strcpy(string,"*.dat"); //find *.dat file handle=FindFirstFile(string,&finddata1);
while(bret && handle=INVALID_HANDLE_VALUE)
{ finddata1.cFileName; //file name bret=FindNextFile(handle,&finddata1);
}
FindClose(handle1); 不过如果你是要查找文件对话框中打开的多个文件, 需要用GetStartPosition和GetNextPathName.
3. 你不要这个文件头, 只有你将你的大对象的没一个变量一个一个对象来串行化, 而不用MFC类对象提供的, 不过即使那样, 也可能有一些你可能不需要的信息, 最彻底的只有你自己定义, 直接写了
CFileDialog fOpen(TRUE,NULL,NULL, OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY |
OFN_OVERWRITEPROMPT, NULL, NULL );
2: FindFristFile,FindNexFile,FindCloseFile的使用没啥困难的, 其方法是首先用FindFristFile找到一个开始开始点, 然后利用FindNexFile一个一个查找, 当结束是要调用FindCloseFile, 以下是一个例程, 查找当前目录下的所有文件:
char string[MAX_PATH];
WIN32_FIND_DATA finddata;
HANDLE handle;
BOOL bret; finddata.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY;
strcpy(string,"*.dat"); //find *.dat file handle=FindFirstFile(string,&finddata1);
while(bret && handle=INVALID_HANDLE_VALUE)
{ finddata1.cFileName; //file name bret=FindNextFile(handle,&finddata1);
}
FindClose(handle1); 不过如果你是要查找文件对话框中打开的多个文件, 需要用GetStartPosition和GetNextPathName.
3. 你不要这个文件头, 只有你将你的大对象的没一个变量一个一个对象来串行化, 而不用MFC类对象提供的, 不过即使那样, 也可能有一些你可能不需要的信息, 最彻底的只有你自己定义, 直接写了
查找文件用CFileFind类比较方便:
CFileFind f
BOOL bFind = f.FindFile("c:\\*.cpp");
while ( bFind )
{
bFind = f.FindNextFile();
// 以下对找到文件进行处理 f.GetFileName() 得到文件名,f.IsDirectory()判断是否目录名...
}
f.Close();
你不要这个文件头, 只有你将你的大对象的没一个变量一个一个对象来串行化, 而不用MFC类对象提供的,不会吧?应有方法,我不信photoshop之类的都是这么做的。
BOOL GetOpenFileName(
LPOPENFILENAME lpofn // address of structure with initialization
// data);
这个函数使用一个参数lpofn,类型为LPOPENFILENAME .
typedef struct tagOFN { // ofn
DWORD lStructSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCTSTR lpstrFilter;
LPTSTR lpstrCustomFilter;
DWORD nMaxCustFilter;
DWORD nFilterIndex;
LPTSTR lpstrFile;
DWORD nMaxFile;
LPTSTR lpstrFileTitle;
DWORD nMaxFileTitle;
LPCTSTR lpstrInitialDir;
LPCTSTR lpstrTitle;
DWORD Flags;
WORD nFileOffset;
WORD nFileExtension;
LPCTSTR lpstrDefExt;
DWORD lCustData;
LPOFNHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
} OPENFILENAME;
在MSDN中有一个例子,你可以看一看,这些信息也可以再MSDN中找到。
OPENFILENAME ofn;
char szFile[256], szFileTitle[256];
char szFilter[]="All File\0*.*\0*.wmf\0*.wmf\0\0";
UINT uiSize;
HANDLE hFile, hMapFile;
LPVOID pMapFile;
DWORD dwHigh, dwLow;
strcpy(szFile, "");
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner =m_hWnd;
ofn.lpstrFilter = szFilter;
ofn.lpstrCustomFilter = (LPSTR) NULL;
ofn.nMaxCustFilter = 0L;
ofn.nFilterIndex = 1;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFileTitle = szFileTitle;
ofn.nMaxFileTitle = sizeof(szFileTitle);
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = "Hello";
ofn.Flags = OFN_ALLOWMULTISELECT|OFN_EXPLORER;
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lpstrDefExt = "WMF";
if(GetOpenFileName(&ofn))
{
if(ofn.nFileOffset==0)//多个文件
{
char Buf[MAX_PATH];
char Path[MAX_PATH];
char * Pos;
Pos=szFile;
strcpy(Path,Pos);
char ch;
Pos+=ofn.nFileOffset;
Pos+=strlen(Path);
Pos++;
do
{
strcpy(Buf,Pos);
char file[MAX_PATH];
strcpy(file,Path);
strcat(file,"\\");
strcat(file,Buf);
AfxMessageBox(file,MB_OK,0);
Pos+=strlen(Buf);
Pos++;
ch=*Pos;
}while(ch!='\0');
}
else//单个文件
{
AfxMessageBox(szFile,MB_OK,0);
}
}
关于使用FindFirstFile等是当你使用OldStyle的打开对话框时(也就是Win31下的那种对话框),你需要使用这些函数来进行长文件和短文件名之间的转换。打开的文件名,都存储在lpstrFile中.