我在程序中用GetSaveFileName来保存文件,发现一个问题。就是设置了OFN_OVERWRITEPROMPT属性后,在“文件名”的框里输入一个已有文件的文件名,然后将这个文件删除,在对话框的窗口中也看不到这个文件,点击“保存”,却提示该文件已存在,但是文件已经被删了啊!我用windows自带的记事本试了一下却不会出现这样的问题。怎么样解决这个问题呢,希望各位发表高见。程序例子如下:
TCHAR szFilename[MAX_PATH] = TEXT("");
BOOL bResult = FALSE;
OPENFILENAME ofn = {0};
ofn.lStructSize = sizeof (OPENFILENAME);
ofn.lpstrFilter = TEXT("All Files\0*.*\0\0");
ofn.lpstrFile = szFilename;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER |
OFN_ENABLEHOOK |
OFN_HIDEREADONLY |
OFN_NOCHANGEDIR |
OFN_PATHMUSTEXIST|
OFN_OVERWRITEPROMPT;
bResult = GetSaveFileName (&ofn);
TCHAR szFilename[MAX_PATH] = TEXT("");
BOOL bResult = FALSE;
OPENFILENAME ofn = {0};
ofn.lStructSize = sizeof (OPENFILENAME);
ofn.lpstrFilter = TEXT("All Files\0*.*\0\0");
ofn.lpstrFile = szFilename;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER |
OFN_ENABLEHOOK |
OFN_HIDEREADONLY |
OFN_NOCHANGEDIR |
OFN_PATHMUSTEXIST|
OFN_OVERWRITEPROMPT;
bResult = GetSaveFileName (&ofn);
CString filename;
char szFileters[]="save files (*.txt)|*.txt|ALL files (*.*)|*.*||";
CFileDialog opendlg (FALSE,"txt","*.txt",OFN_OVERWRITEPROMPT,szFileters,this);
if (opendlg.DoModal()==IDOK){
filename=opendlg.GetPathName();
}
要自己实现的话要重写哪些东西呢?我还真不知道。
(这个不知道算不算小小小bug呢?~ ~ )
对不起,步骤没说清楚,应该这样做:
1.运行程序弹出保存对话框。
2.假设在C盘下有个文件1.txt。在保存对话框中单击选择该文件,则“文件名”中有了该文件名“1.txt”。
3.删除1.txt文件。
4.保存。
5.弹出提示已有此文件的对话框。
刚测试那小段保存代码,也有这个问题。
难道是系统原因?哪位身边有多系统的试试。