如何获取归档在 tar 中的文件(和其他属性)的创建时间?
Posted
技术标签:
【中文标题】如何获取归档在 tar 中的文件(和其他属性)的创建时间?【英文标题】:How to get creation time of file (& other properties) that is archived inside tar? 【发布时间】:2013-03-21 15:17:58 【问题描述】:我正在使用 VS 2010 和 Win32 用 C++ 编写代码来简单地提取 TAR 文件。
我已经完全从头实现了算法来进行提取。
我有一个像这样的 TAR 标头结构:
/* tar Header Block, from POSIX 1003.1-1990. */
/* POSIX header. */
struct posix_header
/* byte offset */
char name[100]; /* 0 */
char mode[8]; /* 100 */
char uid[8]; /* 108 */
char gid[8]; /* 116 */
char size[12]; /* 124 */
char mtime[12]; /* 136 */
char chksum[8]; /* 148 */
char typeflag; /* 156 */
char linkname[100]; /* 157 */
char magic[6]; /* 257 */
char version[2]; /* 263 */
char uname[32]; /* 265 */
char gname[32]; /* 297 */
char devmajor[8]; /* 329 */
char devminor[8]; /* 337 */
char prefix[155]; /* 345 */
/* 500 */
;
从结构中,我可以使用 mtime[12] 保留修改后的文件时间戳。 然后我使用 Win32 ::SetFileTime() 函数来更新提取文件的时间戳属性。
但问题在于访问创建文件时间和最后访问时间。
谁能帮我找出这些信息在 TAR 标头中的存储位置???
还有我将如何解码文件权限,如只读、隐藏、系统.. for Windows???
【问题讨论】:
【参考方案1】:TAR 文件格式是 Unix 发明的,因此它存储的文件信息并不总是能很好地映射到 Windows 约定。
创建和访问时间不是以标准 TAR 格式存储的,因此您需要将它们保留为默认值,或者设置为与修改时间相同的值。但是,您实际上可能有一个ustar format 文件,这确实增加了将此类信息存储在扩展文件条目中的可能性。详情请见here。
Unix 权限以an octal number 的形式存储在mode
字段中。没有与 Windows 文件属性直接等效的属性,因此您唯一能做的就是在它们不包含“w”权限的情况下设置只读属性。
【讨论】:
你分享的链接我之前访问过但没有引用它,因为 /* Jörg Schilling 星标 */ 前缀字段再次拆分为前缀、atime 和 ctime,我认为这没有意义. 这个实用程序www.gnu.org/software/tar 在我尝试时显示不同的创建时间和提取后的修改时间。不知道他们用了什么...以上是关于如何获取归档在 tar 中的文件(和其他属性)的创建时间?的主要内容,如果未能解决你的问题,请参考以下文章