首页 新闻 会员 周边

VS2010 MFC小应用 选择文件,并显示其路径和大小。

0
悬赏园豆:20 [已关闭问题] 关闭于 2012-09-18 15:33

@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里就显示无法打开文件。 是不是代码写得有些不规范?

仰望星空的耕田人的主页 仰望星空的耕田人 | 初学一级 | 园豆:6
提问于:2012-09-17 16:16
< >
分享
所有回答(2)
0

看看你的文件在哪个路径下,有可能是UAC的问题。你可以尝试以管理员权限运行你的程序。

Launcher | 园豆:45045 (高人七级) | 2012-09-17 16:21

已将 

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?

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2012-09-17 16:36

这两者好像相似的吧,如果m_file.GetLength() 等于0 也导致

m_file.GetLength()/1024等于0

我测试了一下m_file.GetLength() 也等于0

@Launcher: 

@李公子: 是“相似”,但不等于,因为 m_file.GetLength()/1024 是整除,结果会取整,所以如果m_file.GetLength()小于1024的话,就是 0。

你可以看下你的文件是不是大小为0。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2012-09-17 16:51
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);

}
仰望星空的耕田人 | 园豆:6 (初学一级) | 2012-09-18 15:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册