我无法os.utime在mac上正确设置修改时间(Mac OS X 10.6.2,运行Python 2.6.1 /usr/bin/python).它与touch实用程序不一致,并且与Finder的"获取信息"窗口中显示的属性不一致.
请考虑以下命令序列.纯文本中的"已创建"和"已修改"时间是指查找程序中"获取信息"窗口中显示的属性.提醒一下,os.utime需要参数(filename, (atime, mtime)).
>>> import os
>>> open('tempfile','w').close()
Run Code Online (Sandbox Code Playgroud)
'created'和'modified'都是当前时间.
>>> os.utime('tempfile', (1000000000, 1500000000) )
Run Code Online (Sandbox Code Playgroud)
'created'是当前时间,'modified'是2017年7月13日.
>>> os.utime('tempfile', (1000000000, 1000000000) )
Run Code Online (Sandbox Code Playgroud)
"创造"和"修改"都是2001年9月8日.
>>> os.path.getmtime('tempfile')
1000000000.0
>>> os.path.getctime('tempfile')
1269021939.0
>>> os.path.getatime('tempfile')
1269021951.0
Run Code Online (Sandbox Code Playgroud)
......但是os.path.get?time并os.stat没有反映出来.
>>> os.utime('tempfile', (1500000000, 1000000000) )
Run Code Online (Sandbox Code Playgroud)
"创造"和"修改" 仍然是2001年9月8日.
>>> os.utime('tempfile', (1500000000, 1500000000) )
Run Code Online (Sandbox Code Playgroud)
'created'是2001年9月8日,'modified'是2017年7月13日.
我不确定这是Python问题还是Mac stat问题.当我退出Python shell并运行时
touch -a -t 200011221234 tempfile
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,修改和创建时间都没有改变.然后我跑了
touch -m -t 200011221234 tempfile …Run Code Online (Sandbox Code Playgroud) 如何设置Unix文件的ctime?
(我更喜欢Python的答案.如果没有办法用标准的Python做,那么我认为C也可以.)
(注意:我知道可以使用os.utime来设置文件的atime和mtime.我对设置ctime很感兴趣.)
(注2:我希望有一个适用于任何POSIXoid Unix的答案,但如果没有,我对Darwin和Ubuntu感兴趣.)
我对stat.h有一个非常奇怪的问题
在我的代码的顶部,我有声明:
#include <sys\types.h>
#include <sys\stat.h>
Run Code Online (Sandbox Code Playgroud)
和功能原型:
int FileSize(string szFileName);
Run Code Online (Sandbox Code Playgroud)
最后,函数本身定义如下:
int FileSize(string szFileName)
{
struct stat fileStat;
int err = stat( szFileName.c_str(), &fileStat );
if (0 != err) return 0;
return fileStat.st_size;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译此代码时,我收到错误:
divide.cpp: In function 'int FileSize(std::string)':
divide.cpp:216: error: aggregate 'stat fileStat' has incomplete type and cannot be defined
divide.cpp:217: error: invalid use of incomplete type 'struct stat'
divide.cpp:216: error: forward declaration of 'struct stat'
Run Code Online (Sandbox Code Playgroud)
从这个线程:我怎样才能在C中获得文件的大小? 我认为这段代码应该可行,我无法弄清楚为什么它不能编译.谁能发现我做错了什么?
我在我的脚本中使用两次stat来查找文件文件权限,一次查找文件的大小.
`stat -c %A "$directory/$file"`
`stat -c %s "$directory/$file"`
Run Code Online (Sandbox Code Playgroud)
我使用的是OSX 10.7,目录和文件是我所在的当前目录和文件的变量.
如何有效地使用stat函数来获取有意义的文件权限(用户,组和其他).
我正在查询文件权限,如下所示:
statInfo = os.stat
permissions = stat.S_IMODE ( os.stat ( 'fooBar.txt' ).st_mode )
Run Code Online (Sandbox Code Playgroud)
这将以十进制形式返回权限.因此,如果fooBar.txt具有八进制文件权限0700,则此处permissions设置为十进制值448.我想是设置9个变量对每个权限(ownerRead,ownerWright,ownerExecute,groupRead,...)如果我要做到这一点,我会用蛮力方法如下所示:
statInfo = os.stat
permissions = stat.S_IMODE ( os.stat ( 'fooBar.txt' ).st_mode )
octPermissions = oct ( permissions )
ownerRead = octPermissions [1] >= 4
ownerWrite = octPermissions [1] == 2 or octPermissions [1] == 6 or octPermissions [1] == 3 or
ownerExecute = octPermissions [1] …Run Code Online (Sandbox Code Playgroud) 我需要找到一种方法来刷新客户端的NFS属性缓存.stat()调用从属性缓存中读取ctime而不是实际值,实际值最多需要3秒才能在缓存中反映出来.在安装工作时使用'noac'选项,但从长远来看会影响性能.
我遇到了解决方案,比如在文件的同一所有者上做了一个chown,但在执行stat()之前是否有适当的方法来刷新属性缓存?这个问题只发生在Redhat Linux而不是FreeBSD上.谁能解释一下?
刚开始学Python。如何在 Python 中获取文件属性的状态?我知道os.chmod(fullname, stat.S_IWRITE)删除只读属性,但是如何在不更改它的情况下获得状态?我需要获得"hidden", "system", "readonly", 的所有属性"archive"
我是我大学系统编程课的助教。最近,学生们正在完成一项涉及复制该程序的作业pwd。
一些学生注意到了似乎不一致的地方。当他们从 readdir 条目中读取 ino 时,它会给出与统计同一目录时不同的 inode。他们中的许多人都在问为什么。目录项的索引节点不应该指向目标目录所在的索引节点吗?如果是这样,为什么 stat 给出不同的 inode?
这是一些示例代码来演示:
#include <stdlib.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
#define DIR_NAME "~redacted~"
int getReaddirInode(char* entName)
{
DIR* directory;
struct dirent* entry;
ino_t result;
if ((directory = opendir(".")) == NULL)
{
perror("opendir");
exit(1);
}
while ((entry = readdir(directory)) != NULL)
{
if (strcmp(entName, entry->d_name) == 0)
{
result = entry->d_ino;
break;
}
}
if (entry == NULL)
{
fprintf(stderr, "No such directory: %s.\n", …Run Code Online (Sandbox Code Playgroud) 我想以与 linuxdiff命令显示的格式相同的格式显示时间。
D:\>diff -dub old.cfg new.cfg
--- old.cfg 2019-05-15 15:03:14.289950700 +0530
+++ new.cfg 2019-05-14 16:07:21.119695300 +0530
Run Code Online (Sandbox Code Playgroud)
我想将文件的上次修改时间显示为2019-05-15 15:03:14.289950700 +0530.
我用过,stat但我没有得到纳秒部分。Alo,需要给定格式的时区。我也试过Time::HiRes,但是无法得到。
my $dt = strftime("%Y-%m-%d %H:%M:%S", localtime((stat($old_file))[9]));
Run Code Online (Sandbox Code Playgroud)
它返回:2019-05-15 15:03:14。你能帮我附加其他信息吗?
可以使用的一种可能的文件类型stat(2)是S_IFWHT,也称为 whiteout。它是什么?