C++ win环境修改文件创建时间、最后的修改时间和最后的访问时间

引言

应用做文件处理后,输出文件时间为当前的系统时间,但往往我们需要被创建的文件具有指定的创建日期、最后的修改日期和最后的访问日期。这里就使用win系统函数SetFileTime设置文件时间信息做完整实例分析。

SetFileTime函数说明

MSDN中对于函数接口有完整介绍,这里需要向函数传递文件句柄、创建时间、最后访问时间和最后修改时间。

BOOL WINAPI SetFileTime(
  _In_           HANDLE   hFile,
  _In_opt_ const FILETIME *lpCreationTime,
  _In_opt_ const FILETIME *lpLastAccessTime,
  _In_opt_ const FILETIME *lpLastWriteTime
);
  • 获得文件句柄
    提示:这里并不是创建文件,而是获得已创建的文件句柄。
    //getthe handle to the file
    HANDLE filename = CreateFile("C:\\Users\\Lily\\Desktop\\varuntest.txt", FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  • 系统时间对象,设置时间
    SYSTEMTIME createTime;
    GetSystemTime(&createTime);
    createTime.wDay = 3;            //changes the day
    createTime.wMonth = 01;         //changes the month
    createTime.wYear = 1921;        //changes the year
    createTime.wHour = 1;           //changes the hour
    createTime.wMinute = 1;         //changes the minute
    createTime.wSecond = 7;         //changes the second
  • 文件时间对象,将时间对象赋值给文件时间
    FILETIME createFiletime;
    SystemTimeToFileTime(&createTime, &createFiletime);
  • 设置文件时间
    //set the filetime on the file
    SetFileTime(filename, &createFiletime, &lastAccessFileTime, &lastWriteFiletime);
  • 关闭文件句柄
    CloseHandle(filename);

完整代码

#include <windows.h>
#include <fstream>
#include <iostream>
using namespace std;

int main(int argc, char** argv) {
    std::cout << "A new project." << endl;

    //creates a fie as varuntest.txt
    ofstream file("C:\\Users\\Lily\\Desktop\\varuntest.txt", ios::app);

    SYSTEMTIME createTime;
    GetSystemTime(&createTime);
    createTime.wDay = 3;            //changes the day
    createTime.wMonth = 01;         //changes the month
    createTime.wYear = 1921;        //changes the year
    createTime.wHour = 1;           //changes the hour
    createTime.wMinute = 1;         //changes the minute
    createTime.wSecond = 7;         //changes the second

    SYSTEMTIME lastWriteTime;
    GetSystemTime(&lastWriteTime);
    lastWriteTime.wDay = 07;        //changes the day
    lastWriteTime.wMonth = 04;      //changes the month
    lastWriteTime.wYear = 2012;     //changes the year
    lastWriteTime.wHour = 9;        //changes the hour
    lastWriteTime.wMinute = 37;     //changes the minute
    lastWriteTime.wSecond = 23;     //changes the second

    SYSTEMTIME lastAccessTime;
    GetSystemTime(&lastAccessTime);
    lastAccessTime.wDay = 20;       //changes the day
    lastAccessTime.wMonth = 07;     //changes the month
    lastAccessTime.wYear = 2017;    //changes the year
    lastAccessTime.wHour = 15;      //changes the hour
    lastAccessTime.wMinute = 31;    //changes the minute
    lastAccessTime.wSecond = 8;     //changes the second

    //creation of a filetimestruct and convert our new systemtime
    FILETIME lastWriteFiletime;
    SystemTimeToFileTime(&lastWriteTime, &lastWriteFiletime);

    FILETIME createFiletime;
    SystemTimeToFileTime(&createTime, &createFiletime);

    FILETIME lastAccessFileTime;
    SystemTimeToFileTime(&lastAccessTime, &lastAccessFileTime);

    //getthe handle to the file
    HANDLE filename = CreateFile("C:\\Users\\Lily\\Desktop\\varuntest.txt", FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    //set the filetime on the file
    SetFileTime(filename, &createFiletime, &lastAccessFileTime, &lastWriteFiletime);

    //close our handle.
    CloseHandle(filename);

    return 0;
}


这里写图片描述
示例代码创建的文件
这里写图片描述
将文件路径修改为指向已经存在的文件,得到的文件时间参数(其中人为访问过一次)

上述代码编译会提示错误

e:\shizhenwei\vs2013projects\testsetfiletime\testsetfiletime\main.cpp(50): error C2664: “HANDLE CreateFileW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE)”: 无法将参数 1 从“const char [36]”转换为“LPCWSTR”
1>          与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换

解决方法:
选中项目,右键属性——>配置属性——>常规——>项目默认值——>字符集,选为“使用多字节字符集”。

总结

在win下开发,上述代码可直接使用。
参考

https://msdn.microsoft.com/en-us/library/ms724933(VS.85).aspx
https://stackoverflow.com/questions/10041651/changing-the-file-creation-date-in-c-using-windows-h-in-windows-7
http://blog.csdn.net/chw1989/article/details/7482205

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,下面是配置 Visual Studio Code (VS Code) 的 C++ 环境的步骤: 1.安装 VS Code:从官方网站下载并安装 VS Code。 2.安装 C++ 扩展:在 VS Code 的扩展市场中搜索“C++”,找到 Microsoft 的 C++ 扩展并安装。 3.安装 C++ 编译器:在 Windows 系统中,可以安装 MinGW 或者 Cygwin,也可以安装 Visual Studio。在 macOS 系统中,可以安装 Xcode。在 Linux 系统中,可以使用系统自带的 GCC 编译器。 4.配置编译器路径:打开 VS Code,按下 Ctrl + Shift + P,输入“C++”,选择“Edit Configurations”,在打开的文件中添加以下配置: ``` { "configurations": [ { "name": "Win32", "includePath": [ "${workspaceFolder}/**" ], "defines": [], "compilerPath": "C:/MinGW/bin/g++.exe", // 编译器路径 "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "gcc-x64", "browse": { "path": [ "${workspaceFolder}" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" } } ], "version": 4 } ``` 其中,修改 "compilerPath" 字段为你的编译器路径。另外,如果你使用的是 macOS 或者 Linux 系统,则需要修改一些其他的配置。 5.创建 C++ 项目:在 VS Code 中新建一个文件夹,右键点击该文件夹,选择“New File”,输入“main.cpp”,然后输入以下代码: ``` #include <iostream> int main() { std::cout << "Hello, world!\n"; return 0; } ``` 保存该文件。 6.编译运行:按下 Ctrl + Shift + B,选择“Win32”,然后 VS Code 就会自动编译并运行该程序。 希望这些步骤可以帮助你配置成功! ### 回答2: VS Code是一款流行的代码编辑器,可以配置C语言环境来进行编程。以下是配置VS Code的C语言环境的步骤: 1. 下载并安装VS Code:首先,需要访问VS Code的官方网站,下载对应操作系统版本的安装程序,并按照提示进行安装。 2. 安装C编译器:要配置C语言环境,需要下载和安装C编译器。在Windows系统上,常用的C编译器是MinGW或者Cygwin。在macOS系统上,可以使用Xcode Command Line Tools自带的编译器。在Linux系统上,一般会默认安装GCC编译器。 3. 安装C/C++扩展:在VS Code中,可以通过安装C/C++扩展来提供C语言的支持和调试功能。在VS Code的扩展面板中,搜索"C/C++"扩展并安装。 4. 配置编译器路径:在VS Code中,按下快捷键Ctrl+Shift+P打开命令面板,输入"Preferences: Open Settings (JSON)",并打开settings.json文件。在该文件中,需要添加一个"compilerPath"属性,指定C编译器的路径。例如,如果使用MinGW编译器,可以添加类似以下的设置: "compilerPath": "C:\\MinGW\\bin\\gcc.exe" 5. 创建C语言项目:在VS Code中,可以通过创建一个文件夹,然后在文件夹中创建一个以.c为后缀的文件来开始一个C语言项目。 6. 编写和运行程序:在VS Code的编辑器中,可以编写C语言代码,并保存为.c文件。然后,按下快捷键Ctrl+Shift+B可以编译并运行程序。编译结果和运行结果可以在VS Code的终端面板中查看。 通过以上几个步骤,就可以成功配置VS Code的C语言环境,并开始使用VS Code进行C语言编程。 ### 回答3: 配置VSCode环境用于C语言编程需要以下几个步骤。 第一步,安装VSCode软件。可以在VSCode官方网站上下载对应的安装包,根据操作系统进行下载并完成安装。 第二步,打开VSCode软件,点击左侧的扩展按钮,在搜索栏中输入“C/C++”,找到对应的插件并安装。这个插件可以提供C语言的相关功能和语法支持。 第三步,安装GCC编译器。GCC是一款常用的编译器,用于编译C语言代码。可以在GNU官网上下载对应的安装包,根据操作系统进行下载并完成安装。安装完成后,将GCC所在的路径添加到系统的环境变量中。 第四步,配置VSCode的C/C++插件。点击扩展按钮,找到已安装的C/C++插件,并点击齿轮图标进入插件的设置页面。在这里,可以配置编译器路径、编译选项和运行代码的配置项。将编译器路径设置为之前安装的GCC编译器所在的路径。 第五步,创建C语言源文件。在VSCode中,点击“文件”菜单,选择“新建文件”,然后保存文件并命名为以.c为后缀的文件名,如“main.c”。 第六步,编写C语言代码。在新建的源文件中输入C语言代码,可以使用C/C++插件提供的自动补全、代码片段等功能来提高编写效率。 第七步,编译运行C语言代码。在VSCode中,使用快捷键Ctrl+Shift+B来进行编译,并选择配置好的C/C++编译器。编译成功后,可以在终端中执行生成的可执行文件,进行运行和调试。 以上是配置VSCode环境进行C语言编程的基本步骤,通过这些配置可以在VSCode中愉快地进行C语言的编写、编译和运行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值