@Launcher
关键代码如下:
void Cno1Dlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 CFileDialog dlg(TRUE); if(dlg.DoModal() == IDCANCEL) return; if(m_file.m_hFile != CFile::hFileNull) OnClose(); m_fileName = dlg.GetFileName(); if(!m_file.Open(m_fileName, CFile::modeRead || CFile::modeWrite)) { AfxMessageBox(_T("无法打开文件")); m_fileName.Empty(); return; } m_filePath = dlg.GetPathName(); SetDlgItemTextW(IDC_EDIT1,m_filePath); SetDlgItemInt(IDC_EDIT2,m_file.GetLength()/1024); }
同样的工程在win 2003里能正常运行,而在win 7里就显示无法打开文件。 是不是代码写得有些不规范?
看看你的文件在哪个路径下,有可能是UAC的问题。你可以尝试以管理员权限运行你的程序。
已将
if(!m_file.Open(m_fileName, CFile::modeRead || CFile::modeWrite))
改为
if(!m_file.Open(m_fileName, CFile::modeCreate || CFile::modeReadWrite))
后可以选择文件了,但是文件大小一致显示是0,会是什么问题?
上面 m_file 是CFile 类型的变量。
@李公子: m_file.GetLength() 等于 0 ,还是 m_file.GetLength()/1024等于0?
这两者好像相似的吧,如果m_file.GetLength() 等于0 也导致
m_file.GetLength()/1024等于0
我测试了一下m_file.GetLength() 也等于0
@Launcher:
@李公子: 是“相似”,但不等于,因为 m_file.GetLength()/1024 是整除,结果会取整,所以如果m_file.GetLength()小于1024的话,就是 0。
你可以看下你的文件是不是大小为0。
void Cno1Dlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 CFileDialog dlg(TRUE); if(dlg.DoModal() == IDCANCEL) return; if(m_file.m_hFile = CFile::hFileNull) OnClose(); m_fileName = dlg.GetPathName(); m_filePath = dlg.GetPathName(); if(!m_file.Open(m_fileName, CFile::modeReadWrite)) { AfxMessageBox(_T("无法打开文件")); m_fileName.Empty(); return; } //强制类型转换 ULONGLONG FileLength = m_file.GetLength()/1024; UINT newFileLength = (UINT)FileLength; SetDlgItemTextW(IDC_EDIT1,m_filePath); SetDlgItemInt(IDC_EDIT2,newFileLength); }