注册 登录
编程论坛 VFP论坛

VFP可以修改文件属性信息吗

easyppt 发布于 2025-04-10 09:49, 619 次点击
文件 右键 → 属性,可以看到文件的 创建时间、修改时间、访问时间,再高级标签中,还有更多信息,比如作者,最后编辑的作者等

VFP怎么修改这些信息吗
15 回复
#2
schtg2025-04-10 12:06
应该可以获得这些参数的,需要试一试。
#3
csyx2025-04-10 14:24
取出来很容易,修改就复杂了

程序代码:
ff = GetFile()
Create Cursor ttt (f1 I, f2 V(200))
sh = CreateObject('Shell.Application')
od = sh.NameSpace(JustPath(ff))
of = od.items.item(JustFname(ff))
For ii = -1 to 500
    Insert into ttt Values (ii, od.GetDetailsOf(of,ii) )
EndFor
Locate
Browse



[此贴子已经被作者于2025-4-10 19:41编辑过]

#4
shizi02025-04-11 18:45
时间MyFll好改,实际调用的windowsApi:
函数名:SetFileTime(cFileName,tDateTime[,nType])
修改文件的修改时间、创建时间、最后访问时间
返回值:逻辑值,为真时成功。
参数:
cFileName:字符型,要修改时间的文件名
tDateTime:日期时间型,将要修改成的时间
[nType]:数值型,可选,修改的类型,默认值为2,其中:
1-创建时间
2-修改时间
3-最后访问时间


[此贴子已经被作者于2025-4-11 18:47编辑过]

#5
easyppt2025-04-12 08:11
谢谢各位老师
创建者、计算机 等这些信息能改吗
比如打开一个word文档,详细信息中,来源 这些信息,要是也都能改就好了



[此贴子已经被作者于2025-4-12 08:14编辑过]

#6
csyx2025-04-12 11:48
不是所有属性都可以修改的。word自己就可以修改部分隐私信息,凡是详细信息中可以手工修改的属性,word对象都可以做到,但是调用COM对象非常慢

程序代码:
Clear
ow = NewObject('Word.Application')
od = ow.Documents.Open(GetFile('doc,docx'))
For each op in od.BuiltInDocumentProperties
    ? Padr(op.name+':', 50, '.')
    Try
        ?? op.value
    Catch
        ?? 'N/A'
    EndTry
    *-- 修改或清空某些属性: 、
    Do case
    Case InList(op.name, 'Author','????')    && 作者
        m.op.Value = 'easyppt@bccn'
        ?? '  >>> ' + m.op.Value
    Case InList(op.name, 'Manager','Company')  && 管理者、公司
        op.value = ''
        ?? '  >>> (清空)'
    Otherwise
        *-- 不修改或不能修改
    EndCase
EndFor
od.Close(.t.)   && 保存修改
ow.Quit()

#7
easyppt2025-04-19 17:47
PDF文件,通过修改文件创建时间的工具修改后,,再用WPS查看文档信息后,会看到 PDF文件的原始创建时间并没有改变

#8
csyx2025-04-20 09:06
以下是引用easyppt在2025-4-19 17:47:53的发言:
PDF文件,通过修改文件创建时间的工具修改后,,再用WPS查看文档信息后,会看到 PDF文件的原始创建时间并没有改变

前面跟你说过,修改是很复杂的,不同类型的文件可能有它自己独特的结构,没有统一的标准
pdf 的创建和修改时间是采用元数据方式保存在 pdf 文件内部的,可以用元数据编辑器修改,自己手改或写段 vfp 代码来改也不难
#9
easyppt2025-04-23 08:15
谢谢老师解答,原来是 元数据 存储文档的额外信息的。

另外要有一个问题:就是文件固有的 创建时间、修改时间、最后访问时间  这3个时间通过文件右键属性就能看到,这个是怎么存储在文件中的,通过hex查看器也看不到,但第三方小工具可以修改,所以这3个时间应该也是写在文件头中吧,有固定位置吗,是什么结构存储的。
#10
吹水佬2025-08-04 15:02
以下是引用easyppt在2025-4-23 08:15:47的发言:

谢谢老师解答,原来是 元数据 存储文档的额外信息的。

另外要有一个问题:就是文件固有的 创建时间、修改时间、最后访问时间  这3个时间通过文件右键属性就能看到,这个是怎么存储在文件中的,通过hex查看器也看不到,但第三方小工具可以修改,所以这3个时间应该也是写在文件头中吧,有固定位置吗,是什么结构存储的。

某个文件的时间戳数据不是存放在这个文件里的。
如NTFS卷中存储文件和目录元数据的‌专用系统文件‌MFT(文件名为$MFT)。
要修改这些时间戳元数据,可以试试以“管理员身份”调用windows相关API。

#11
fyyylyl2025-08-05 08:17
能说说这么做的目的吗?
#12
easyppt2025-08-05 08:34
招投标PDF文件有明确的时间截止日期,因为内容要改,所以需要重新生成PDF文件,但日期必须小于这个截止日期。
不然会被发现作弊行为
发现PDF文件,右键属性里的 创建、修改 等日期  和元数据里的 好像都是独立的,所以改了右键属性里的 日期,元数据里不会自动改

#13
hsfisher2025-08-05 08:37
#14
吹水佬2025-08-05 08:45
回复 12楼 easyppt
如果元数据的时间是按本地时间,可以试试改本地时间,重新编辑(复制粘贴、另存等)。

#15
yiyanxiyin2025-08-06 10:18
最简单的powershell:   Set-ItemProperty -Path E:\25、采购合同\2、2022年1050.3万合同.pdf -Name LastWriteTime -Value "2023-03-22 09:55:03"
#16
yiyanxiyin2025-08-06 10:19
c++命令行工具源码
程序代码:
#include <windows.h>
#include <iostream>
#include <cstdio>

int main(int argc, char* argv[]) {
    // 检查参数数量
    if (argc != 3) {
        std::cerr << "用法: " << argv[0] << " <文件名> \"<YYYY-MM-DD HH:MM:SS>\"" << std::endl;
        return 1;
    }

    // 解析时间参数
    SYSTEMTIME st = {0};
    int year, month, day, hour, minute, second;

    if (sscanf(argv[2], "%d-%d-%d %d:%d:%d",
                &year, &month, &day, &hour, &minute, &second) != 6) {
        std::cerr << "时间格式错误,请使用: YYYY-MM-DD HH:MM:SS" << std::endl;
        return 1;
    }

    // 填充SYSTEMTIME结构
    st.wYear = year;
    st.wMonth = month;
    st.wDay = day;
    st.wHour = hour;
    st.wMinute = minute;
    st.wSecond = second;
    st.wMilliseconds = 0;  // 毫秒设为0

    // 打开文件
    HANDLE hFile = CreateFile(
        argv[1],                   // 文件名来自参数
        GENERIC_WRITE,            
        FILE_SHARE_WRITE,         
        NULL,                     
        OPEN_EXISTING,            
        FILE_ATTRIBUTE_NORMAL,     
        NULL                       
    );

    if (hFile == INVALID_HANDLE_VALUE) {
        std::cerr << "无法打开文件: " << GetLastError() << std::endl;
        return 1;
    }

    // 转换时间格式
    FILETIME ftCreation, ftLastAccess, ftLastWrite;
    if (!SystemTimeToFileTime(&st, &ftCreation) ||
        !SystemTimeToFileTime(&st, &ftLastAccess) ||
        !SystemTimeToFileTime(&st, &ftLastWrite)) {
        std::cerr << "时间转换失败: " << GetLastError() << std::endl;
        CloseHandle(hFile);
        return 1;
    }

    // 设置文件时间
    if (!SetFileTime(hFile, &ftCreation, &ftLastAccess, &ftLastWrite)) {
        std::cerr << "无法设置文件时间: " << GetLastError() << std::endl;
        CloseHandle(hFile);
        return 1;
    }

    CloseHandle(hFile);
    std::cout << "文件时间设置成功。" << std::endl;

    return 0;
}
1