`

VC++文件操作

    博客分类:
  • VC++
阅读更多

文件属性相关

1.判断文件是否存在

利用CFile类和CFileStatus类判断

CFileStatus filestatus;
if (CFile::GetStatus(_T("d:\\softist.txt"), filestatus))
    AfxMessageBox(_T("文件存在"));
else
    AfxMessageBox(_T("文件不存在"));

利用CFileFind类判断

CFileFind filefind;

CString strPathname = _T("d:\\softist.txt");

if(filefind.FindFile(strPathname))

    AfxMessageBox(_T("文件存在"));

else

    AfxMessageBox(_T("文件不存在"));


利用API函数FindFirstFile判断,这个函数还可以判断文件属性,日期,大小等属性。例:

WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind = FindFirstFile(_T("d:\\softist.txt"), &FindFileData);
if (hFind == INVALID_HANDLE_VALUE) 
{
    AfxMessageBox(_T("文件不存在"));

else 
{
    AfxMessageBox(_T("文件存在"));
    FindClose(hFind);
}

2.文件日期操作。下面是取得"d:\\softist.txt"的文件修改时间,TRACE以后,再把文件修改时间改成 2000-12-03 12:34:56

HANDLE     hFile;

FILETIME   filetime;

FILETIME   localtime;

SYSTEMTIME systemtime;

 

hFile = CreateFile(_T("d:\\softist.txt"), GENERIC_READ | GENERIC_WRITE,

     0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

 

if (hFile != INVALID_HANDLE_VALUE)

{

    GetFileTime(hFile, NULL, NULL, &filetime);      //取得UTC文件时间

    FileTimeToLocalFileTime(&filetime, &localtime); //换成本地时间

    FileTimeToSystemTime(&localtime, &systemtime);  //换成系统时间格式

 

    TRACE("%04d-%02d-%02d %02d:%02d:%02d\r\n",

          systemtime.wYear, systemtime.wMonth, systemtime.wDay,

          systemtime.wHour, systemtime.wMinute, systemtime.wSecond);

 

    //把文件时间修改成 2000-12-03 12:34:56

    systemtime.wYear = 2000; systemtime.wMonth = 12; systemtime.wDay = 3;

    systemtime.wHour = 12; systemtime.wMinute = 34; systemtime.wSecond = 56;

    SystemTimeToFileTime(&systemtime, &localtime); //换成文件时间格式

    LocalFileTimeToFileTime(&localtime, &filetime); //换成UTC时间

    SetFileTime(hFile, NULL, NULL, &filetime);  //设定UTC文件时间

    CloseHandle(hFile);

}

3.设置文件属性

BOOL SetFileAttributes( LPCTSTR lpFileName, DWORD dwFileAttributes );

dwFileAttributes 的意义

FILE_ATTRIBUTE_ARCHIVE   保存文件

FILE_ATTRIBUTE_HIDDEN    隐藏文件

FILE_ATTRIBUTE_NORMAL   通常文件

FILE_ATTRIBUTE_READONLY 只读文件

FILE_ATTRIBUTE_SYSTEM   系统文件

例:

SetFileAttributes(_T("d:\\softist.txt", FILE_ATTRIBUTE_READONLY);

文件的复制,移动,删除,更名

1.文件的复制API

BOOL CopyFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL bFailIfExists);

bFailIfExists用来制定如果目标文件已经存在时,是否中止复制操作,返回FALSE。例,把"d:\\softist1.txt"复制到"d:\\softist2.txt",即使"d:\\softist2.txt"已经存在。

BOOL bRet = CopyFile(_T("d:\\softist1.txt"), _T("d:\\softist2.txt"), FALSE);

 

 

 

 

 

2.文件的移动API

BOOL MoveFile( LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName );

这个函数可以移一个文件,或目录(包括子目录),例,

MoveFile(_T("d:\\softist.txt"), _T("d:\\softist2.txt"));

下面的API带着选项dwFlags ,移动文件,或目录(包括子目录)。

BOOL MoveFileEx( LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, DWORD dwFlags );

dwFlags的意义: 

MOVEFILE_REPLACE_EXISTING 如果目标文件存在是否替代它 

MOVEFILE_DELAY_UNTIL_REBOOT 文件移动准备,下次启动系统时执行移动作业。

3.删除文件

API

BOOL DeleteFile( LPCTSTR lpFileName );

MFC

static void PASCAL CFile::Remove(LPCTSTR lpszFileName);

4.文件更名MFC

TCHAR* pOldName = _T("Oldname_File.dat");

TCHAR* pNewName = _T("Renamed_File.dat");

try

{

    CFile::Rename(pOldName, pNewName);

}

catch(CFileException* pEx )

{

    TRACE(_T("File %20s not found, cause = %d\n"), pOldName,

    pEx->m_cause);

    pEx->Delete();

}

遍历文件目录

遍历文件目录,即把一个目录里的文件以及子目录里的文件名都取出来。本文是CFileFind类的使用例的笔记。下面的程序是从一个目录出发,把这个目录里的所有成员按着层次TRACEDEBUG输出画面。

void TravelFolder(CString strDir, int nDepth)

{

    CFileFind filefind;                                         //声明CFileFind类型变量

    CString strWildpath = strDir + _T("\\*.*");     //所有文件都列出。

    if(filefind.FindFile(strWildpath, 0))                    //开始检索文件

    {

        BOOL bRet = TRUE;

        while(bRet)

        {

            bRet = filefind.FindNextFile();                 //枚举一个文件

            if(filefind.IsDots())                                 //如果是 .. 做下一个

                continue;

            for (int i = 0; i < nDepth; i ++)                 //层次空格打印

            {

                TRACE(_T("    "));

            }

            if(!filefind.IsDirectory())                          //不是子目录,把文件名打印出来

            {

                CString strTextOut = strDir + CString(_T("\\")) + filefind.GetFileName();

                TRACE(_T("file = %s\r\n"), strTextOut);

            }

            else                                                    //如果是子目录,递归调用该函数

            {

                CString strTextOut = strDir + CString(_T("\\")) + filefind.GetFileName();

                TRACE(_T("dir = %s\r\n"), strTextOut);

                TravelFolder(strTextOut, nDepth + 1);//递归调用该函数打印子目录里的文件

            }

        }

        filefind.Close();

    }

}

//测试,把d盘的\temp里的所有文件和子目录打印到DEBUG出画面

void Test()

{

    TravelFolder(CString(_T("d:\\temp")), 0);

}

文件目录操作

1.创建目录(API)

BOOL CreateDirectory(LPCTSTR pstrDirName);//pstrDirName是全路径

2.删除目录(API)

BOOL RemoveDirectory( LPCTSTR lpPathName );

3.判断目录是否存在(Shell Function

#include <shlwapi.h>#pragma comment(lib, "shlwapi.lib") if (PathIsDirectory(_T("d:\\temp"))) AfxMessageBox(_T("存在"));else AfxMessageBox(_T("不存在"));

 

 

 

 

 

4.取得当前目录(API)

DWORD GetCurrentDirectory( DWORD nBufferLength, LPTSTR lpBuffer );

5.取得执行文件所在目录(API)

DWORD GetModuleFileName( HMODULE hModule, LPTSTR lpFilename, DWORD nSize );

6.取得功能目录(Shell Function

BOOL SHGetSpecialFolderPath( HWND hwndOwner,  LPTSTR lpszPath, int nFolder, BOOL fCreate);

例:读取我的档案目录

    TCHAR szDirFile[1024];
    memset(szDirFile, 0, sizeof(szDirFile));
    BOOL bRet = SHGetSpecialFolderPath(NULL,szDirFile,CSIDL_PERSONAL,true);
    if (bRet)
    {
        AfxMessageBox(szDirFile);
    }

7.选择目录用的对话框界面

利用Shell Function可以打出选择目录用的对话框界面

 

#include<shlobj.h>

INT CALLBACK _BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM pData)

{

    TCHAR szDir[MAX_PATH];

    switch(uMsg)

    {

    case BFFM_INITIALIZED:

        // WParam is TRUE since you are passing a path.

        // It would be FALSE if you were passing a pidl.

        SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)pData);

font-size: smal

分享到:
评论

相关推荐

    VC++文件操作代码

    本教程“VC++文件操作代码”聚焦于如何利用对话框和信息框来实现文件的打开和保存功能,这是孙鑫教程系列的第12课内容。下面将详细介绍这些知识点。 首先,文件操作通常涉及CFile类,它是MFC(Microsoft Foundation...

    VC++ 文件操作源代码

    在VC++编程环境中,C++语言提供了丰富的文件操作功能,使得开发者可以进行读写、创建、删除等操作。本文将深入探讨如何利用VC++ C++实现文件操作,并通过源代码实例来阐述具体步骤。 首先,要进行文件操作,我们...

    VC++文件操作通用类

    **VC++文件操作通用类详解** 在VC++编程中,文件操作是不可或缺的一部分,它涉及到数据的读写、存储和加载。为了简化这一过程,开发者通常会创建一个通用的文件操作类,使得处理文件如同在VB(Visual Basic)中一样...

    VC++ 文件的删除 文件操作

    在VC++编程环境中,文件操作是一项基础且重要的任务,其中包括创建、读取、写入以及删除文件。本篇文章将详细讲解在VC++中如何进行文件删除的操作,这对于任何需要处理文件系统的应用程序来说都是必不可少的知识。 ...

    vc++文件系统大全

    9. **INI文件操作**:INI文件是一种简单的配置文件格式,VC++中的`GetPrivateProfileString()`和`WritePrivateProfileString()`函数允许读写INI文件,进行配置信息的存储和检索。 以上就是“vc++文件系统大全”所...

    vc++编写的文件分割合并器

    这个工具的源码可以通过联系描述中的邮箱`cyjfeidie@126.com`获取,对于想要深入学习VC++文件操作或者想了解如何实现文件分割合并功能的开发者来说,这是一份宝贵的参考资料。通过阅读和理解源码,可以学习到实际...

    VC++文件操作与注册表读写操作例子

    摘要:VC/C++源码,文件操作,注册表,文件操作 VC++文件操作与注册表读写操作例子,了解一下注册表API以及MFC对文件操作的支持,Win32 API对文件操作的支持,主要学习一下文件指针定位、文本方式和二进制方式文件操作...

    VC++ 文件读写例子

    这就是一个简单的VC++文件读写和字符转二进制的实例。这个程序可以帮助开发者了解如何操作文件流以及进行基本的数据类型转换。如果你在实际应用中遇到问题,可以随时提问,以便获得更具体的帮助和指导。记住,良好的...

    目录浏览源代码(VC++)

    【标签】"VC++ 文件操作"表明该程序涉及到C++编程语言和Microsoft Visual Studio的环境,特别是涉及到文件系统交互的部分。在VC++中,文件操作通常依赖于标准库(如fstream)以及Windows API函数(如CreateFile、...

    VC++ 文件搜索查找工具

    在IT领域,尤其是在软件开发中,文件搜索和查找功能是必不可少的工具,尤其对于开发者来说,能够...总的来说,一个优秀的VC++文件搜索查找工具可以极大地提升开发者的生产力,帮助他们在庞大的代码库中游刃有余地穿梭。

    vc++文件上传下载

    在VC++环境中,文件上传和下载是常见的网络编程任务,主要涉及到客户端与服务器之间的数据交换。这个项目可能是一个简单的...对于初学者来说,这是一个很好的学习实践平台,可以帮助理解网络编程和文件操作的综合应用。

    VC++ 操作文件DEMO

    在VC++编程环境中,文件操作是一项基础且重要的任务,它涉及到读取、写入、创建、删除等文件处理功能。本DEMO将详细介绍如何在VC++中进行文件操作,并通过实例代码来展示具体实现。 首先,VC++使用C++标准库中的`...

    文档与串行化:VC++文件操作示例

    内容索引:VC/C++源码,文件操作,文件操作 const char *与char * const的区别。C语言对文件读写的支持,FILE指针;文本文件和二进制文件的区别。用文本方式读写文件和以二进制方式读写文件的注意事项。C++对文件读写...

    VC++文件分割、合并工具

    VC++支持C++标准库,其中包含了许多用于文件操作的高效函数和类,如ifstream(输入文件流)和ofstream(输出文件流),它们使得读写文件变得简单而快速。同时,VC++提供了多线程支持,允许程序同时处理多个任务,...

    VC++文件分割器

    **VC++文件分割器详解** 在信息技术领域,文件管理是一个重要的方面,而文件分割与合并则是其中的一个实用功能。本文将深入探讨使用Visual C++ 6.0开发的“VC++文件分割器”这一工具,它允许用户高效地对大文件进行...

    VC++中文件读、写和其他相关操作汇总

    在VC++编程环境中,文件操作是至关重要的,无论是开发应用程序还是进行数据分析,都需要与文件进行交互。本篇文章将深入探讨如何在Visual C++ (VC++),特别是VS2008环境下,进行文件的读取、写入以及其他相关操作。...

    VC++ 文件的加密

    在VC++项目中,我们需要配置OpenSSL库,并通过API接口调用相应的加密函数,如`EVP_EncryptInit_ex()`、`EVP_EncryptUpdate()`和`EVP_EncryptFinal_ex()`等,进行文件的读取、加密和写入操作。 对于文件加密的流程,...

    VC++操作Excel文件

    用C++代码实现对Excel的操作并不十分容易。这里提供了一个动态库和相关的说明文档,可以有效实现对Excel操作,并支持中文。

    VC++ 读写操作XML文件

    在VC++环境中,进行XML文件的读写操作是一项常见的任务,尤其在开发涉及数据存储、配置管理或数据交换的应用程序时。XML(eXtensible Markup Language)是一种结构化数据格式,具有良好的可读性和可扩展性,因此被...

    VC++文件查找替换

    1. 文件I/O:在VC++中,我们可以使用标准库中的`fstream`类进行文件操作。例如,`ifstream`用于读取文件,`ofstream`用于写入文件,而`fstream`则同时支持读写。要查找文件中的内容,首先需要打开文件,然后逐行读取...

Global site tag (gtag.js) - Google Analytics