1、其实之所以要使用文件类型,只是为了方便软件认识,让后进行关联。它不是必要的。比如说 *.doc 文件,默认关联的程序是 Microsoft Word 。关联程序的意思是,双击这个文件,会自动用 Microsoft Word 打开它。
2、但这只是默认的,可以通过下面的步骤来修改打开 *.doc 文件的默认程序:
【在文件上右击-打开方式-选择程序,选择一个软件】,比如说金山的 wps。
那么下次双击 *.doc 文件,就是用金山 wps 打开了。
综上所述,一种类型的文件,是可以用多种软件打开的(*.doc 可以用 WORD 打开,也可以用 WPS 打开,当然还可以用其他程序打开,这要它能识别文件的格式。)。加上文件类型,可以让程序方便的找到自己能识别的文件。当然,没有文件类型,文件的内容(一串二进制数字)其实是一样的,程序还是能打开的。
比如说有个文件叫 a.doc,你双击它,默认会用 Microsoft Word 打开。
把它重命名为 a (注意没有文件类型后缀),你双击打,操作系统就【不知道】怎么打开这个文件了。这时候,操作系统会跳出一个对话框,让你选择打开这个文件的程序。如果你选择了 Microsoft Word ,还是可以正常打开这个文件的。
这才是文件类型真正的作用。
因为不是用竖线分隔,GetOpenFileName里面lpstrFilter用\0分隔
AddFiles.m_ofn.lpstrFilter = "dsw files(*.dsw)\0*.dsw\0dsp files(*.dsp)\0*.dsp\0cpp files(*.cpp)\0*.cpp\0head files(*.h)\0*.h\0All files(*.*)\0*.*\0";
改成这样再试一下。mfc我不会用,不过至少直接调用api的话是这样的,猜测mfc是一样
static TCHAR BASED_CODE szFilter[] = _T("图形文件 (*.DWG)|*.DWG|CPP文件(*.CPP)|*.cpp|所有文件 (*.*)|*.*||");
CFileDialog FileDlg(TRUE, _T("DWG"), SFileName, OFN_HIDEREADONLY | OFN_ENABLESIZING, szFilter, NULL);
FileDlg.m_ofn.lpstrTitle = _T("选择文件");
if (FileDlg.DoModal() != IDOK) return;
SFileName = FileDlg.GetPathName();