修改文件时间

本文介绍如何使用Windows API调整文件的创建时间和最后写入时间。通过解析命令行参数来设定指定的时间,并利用SystemTimeToFileTime函数将系统时间转换为文件时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 思路:
调用API!
属于那种API呢?时间--文件----文件时间-----------关于文件操作的API和时间操作的API

文件API
详见platform SDK-----windows Base services-----------Files and I/O--------File I/O
CreateFile----打开文件

时间API
详见platform SDK-----windows Base services------General Library ---------Time 
SetFileTime---设置文件时间


但是上面两个函数还不够用
因为SetFileTime的参数FILETIME结构---是文件时间,我知道的时间是系统时间
需要从系统时间(SYSTEMTIME)转化到文件时间(FILETIME)
SystemTimeToFileTime
系统时间是年,月,日...容易填充!

代码如下
#include <windows.h>
#include 
<stdio.h>

int main( int argc, char *argv[ ])
{
    HANDLE hFile;
    FILETIME CreateTime;
    SYSTEMTIME st;

    
if( argc == 1 )
    
{
        printf(
"SetTime.exe c:/123.txt 2000 10 01 10 10");
        
return 1;
    }


    hFile 
= CreateFile(argv[1],GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);

    
if (hFile == INVALID_HANDLE_VALUE)
    
{
        puts(
"Open File Fail!");
        
return 1;
    }

    
//创建时间
    st.wYear = atoi(argv[2]);/*2006*/;
    st.wMonth 
= atoi(argv[3]);
    st.wDay 
= atoi(argv[4]);
    st.wHour 
= atoi(argv[5]) - 8;  //0-8  1-9  10-8
    st.wMinute =atoi(argv[6]);
    st.wSecond 
= 0;
    st.wMilliseconds 
= 0;
    st.wDayOfWeek 
= 1;

    BOOL f 
= SystemTimeToFileTime(&st, &CreateTime);  
    
//     f = SystemTimeToFileTime(&st, &LastWriteTime);
    f = SetFileTime(hFile,              // sets last-write time for file
        &CreateTime, (LPFILETIME) NULL,&CreateTime);

    CloseHandle(hFile);
    
return 0;
}
上面的atoi(argv[5] - 8 )中的-8是如下意思:
wHour (0-23)
0代表8点
1代表9点
所以要减8


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值