• Win32 文件(1)


    8.1 如何获得或设置文件的属性

    GetFileAttributes和SetFileAttributes方法

    void CDemoDlg::OnGetFileAttributes() 
    {
        //创建文件夹对话框
        CFolderDialog dlg(NULL, NULL, NULL, BIF_BROWSEINCLUDEFILES);
    
        if (dlg.DoModal() == IDOK)
        {
            //获得文件路径
            CString strPathName = dlg.GetPathName();
    
            //获得文件属性
            DWORD dwFileAttributes = ::GetFileAttributes(strPathName);
    
            CString strFileAttributes = _T("");
    
            if (dwFileAttributes & FILE_ATTRIBUTE_NORMAL)
            {
                strFileAttributes += _T("无\n");
            }
            if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                strFileAttributes += _T("目录\n");
            }
            if (dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE)
            {
                strFileAttributes += _T("存档\n");
            }
            if (dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
            {
                strFileAttributes += _T("隐藏\n");
            }
            if (dwFileAttributes & FILE_ATTRIBUTE_READONLY)
            {
                strFileAttributes += _T("只读\n");
            }
            if (dwFileAttributes & FILE_ATTRIBUTE_SYSTEM)
            {
                strFileAttributes += _T("系统\n");
            }
            if (dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY)
            {
                strFileAttributes += _T("临时\n");
            }
    
            CString strText = _T("");
            strText.Format(_T("文件属性:\n%s"), strFileAttributes);
            AfxMessageBox(strText);    
        }
    }
    
    void CDemoDlg::OnSetFileAttributes() 
    {
        //创建文件夹对话框
        CFolderDialog dlg(NULL, NULL, NULL, BIF_BROWSEINCLUDEFILES);
    
        if (dlg.DoModal() == IDOK)
        {
            //获得文件路径
            CString strPathName = dlg.GetPathName();
        
            DWORD dwFileAttributes = FILE_ATTRIBUTE_ARCHIVE |
                FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY;
    
            //设置文件属性
            ::SetFileAttributes(strPathName, dwFileAttributes);
    
            CString strFileAttributes = _T("存档\n隐藏\n只读\n");
            
             CString strText = _T("");
             strText.Format(_T("文件属性:\n%s"), strFileAttributes);
             AfxMessageBox(strText);    
        }
    }
    

    8.2 如何获得文件的信息

    用CFile::GetStatus静态方法获取CFileStatus结构

    void CDemoDlg::OnGetFileInfo() 
    {
        //创建文件对话框
        CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | 
            OFN_OVERWRITEPROMPT, _T("所有文件(*.*)|*.*||"));
    
        if (dlg.DoModal() == IDOK)
        {
            //获得文件路径
            CString strPathName = dlg.GetPathName();
    
            //获得文件信息
            CFileStatus FileStatus;
            if (CFile::GetStatus(strPathName, FileStatus))
            {
                CString strText = _T("");
                CString strInfo = _T("");
    
                strInfo.Format(_T("名称:%s\n"), 
                    FileStatus.m_szFullName);
                strText += strInfo;
    
                strInfo.Format(_T("大小:%d字节\n"), 
                    FileStatus.m_size);
                strText += strInfo;
    
                strInfo.Format(_T("创建时间:%d年%d月%d日,%02d:%02d:%02d\n"), 
                    FileStatus.m_ctime.GetYear(),
                    FileStatus.m_ctime.GetMonth(),
                    FileStatus.m_ctime.GetDay(),
                    FileStatus.m_ctime.GetHour(),
                    FileStatus.m_ctime.GetMinute(),
                    FileStatus.m_ctime.GetSecond());
                strText += strInfo;
                strInfo.Format(_T("修改时间:%d年%d月%d日,%02d:%02d:%02d\n"),
                    FileStatus.m_mtime.GetYear(),
                    FileStatus.m_mtime.GetMonth(),
                    FileStatus.m_mtime.GetDay(),
                    FileStatus.m_mtime.GetHour(),
                    FileStatus.m_mtime.GetMinute(),
                    FileStatus.m_mtime.GetSecond());
                strText += strInfo;
                strInfo.Format(_T("访问时间:%d年%d月%d日,%02d:%02d:%02d\n"),
                    FileStatus.m_atime.GetYear(),
                    FileStatus.m_atime.GetMonth(),
                    FileStatus.m_atime.GetDay(),
                    FileStatus.m_atime.GetHour(),
                    FileStatus.m_atime.GetMinute(),
                    FileStatus.m_atime.GetSecond());
                 strText += strInfo;
    
                CString strFileAttributes = _T("");
                if (FileStatus.m_attribute & 0x00)
                {
                    strFileAttributes += _T("无\n");
                }
                if (FileStatus.m_attribute & 0x01)
                {
                    strFileAttributes += _T("只读\n");
                }
                if (FileStatus.m_attribute & 0x02)
                {
                    strFileAttributes += _T("隐藏\n");
                }
                if (FileStatus.m_attribute & 0x04)
                {
                    strFileAttributes += _T("系统\n");
                }
                if (FileStatus.m_attribute & 0x08)
                {
                    strFileAttributes += _T("卷标\n");
                }
                if (FileStatus.m_attribute & 0x10)
                {
                    strFileAttributes += _T("目录\n");
                }
                if (FileStatus.m_attribute & 0x20)
                {
                    strFileAttributes += _T("存档\n");
                }
                strInfo.Format(_T("属性:%s"), strFileAttributes);
                strText += strInfo;
    
                AfxMessageBox(strText);
            }
        }
    }
    

    8.3 如何使用文件对话框

    即CFileDialog的使用

    void CDemoDlg::OnBrowseFile() 
    {
        //文件扩展名
        CString strFilter = _T("所有文件(*.*)|*.*||");
        //创建文件对话框
        CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | 
            OFN_OVERWRITEPROMPT, strFilter);
        //对话框标题
        dlg.m_ofn.lpstrTitle = _T("浏览文件");
    
        if(dlg.DoModal() == IDOK)
        {
            //获得文件路径
            CString strPathName = dlg.GetPathName();
    
            CString strText = _T("");
            strText.Format(_T("%s"), strPathName);
            AfxMessageBox(strText);    
        }
    }
    

    8.4 如何实现文件夹对话框


    MFC本身没有文件夹对话框,可借助SHBrowseForFolder函数来创建对话框

    int CFolderDialog::DoModal()
    {
        int nResult = 0;
    
        m_pidl = SHBrowseForFolder(&m_bi);
    
        if (m_pidl != NULL)
        {
            nResult = IDOK;
        }
        else
        {
            nResult = IDCANCEL;
        }
    
        return nResult;
    } 
    
    CString CFolderDialog::GetPathName()
    {
        CString strPathName = _T("");
        TCHAR szPathName[MAX_PATH];
    
        if(::SHGetPathFromIDList(m_pidl, szPathName))
        {
            strPathName = szPathName;
        }
    
        return strPathName;
    }
    

    8.5 如何在列表框或组合框中显示文件和目录

    使用DlgDirListComboBox和DlgDirList函数

    void CDemoDlg::OnTest() 
    {
        TCHAR szPathName[MAX_PATH] = _T(".");
        UINT nFileType = DDL_READWRITE | DDL_READONLY | DDL_HIDDEN | DDL_SYSTEM | DDL_ARCHIVE;
    
        //在组合框中显示文件和目录列表
        DlgDirListComboBox(szPathName, IDC_COMBO, 0, nFileType);
        ((CComboBox*)GetDlgItem(IDC_COMBO))->SetCurSel(0);
    
        //在列表框中显示文件和目录列表
        DlgDirList(szPathName, IDC_LIST, 0, nFileType);
    }
    
  • 相关阅读:
    Python进阶-----类、对象的属性的增删改查
    SpringCloud(Finchley版) 服务注册与服务发现-Eureka原理深入
    SpringCloud项目之Eureka 配置 application.yml
    sql 获得各科最高分成绩和人数
    mysql主从同步
    Log4j.properties
    JDBC 配置 jdbc.properties
    Java 通过ant打包时给JS/Jsp/css等文件加上版本号 防止有缓存
    Ant 打包 build文件
    Java zip 压缩包下载excel文件
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1998141.html
Copyright © 2020-2023  润新知