问题描述
请原谅我蹩脚的英文
我尝试使用 setxattr()
为某个文件设置扩展属性的值,代码如下:
int set_scl(string file_name,char scl)
{
char scl_data[16];
scl_data[0] = scl;
ssize_t size = 1;
size = setxattr(file_name.c_str(),"user.Dosstream.easescl",scl_data,size,0);
if (size == -1)
{
perror("set scl:");
return -1;
}
return 0;
}
但是一旦我对文件(例如 1234.xlsx
)执行此操作,然后我无法打开它,但是我仍然可以看到它。 Excel 的错误信息是:
找不到 \\192.168.2.163\wy\1234.xlsx。
顺便说一下,在 smb.cnf
中我已经将 vfs objects = acl_xattr streams_xattr
设置为 https://www.samba.org/samba/docs/current/man-html/vfs_streams_xattr.8.html
当我使用Process Monitor来跟踪它时,我发现一个事件的路径是\\192.168.2.163\wy\1234.xlsx:easescl,操作是'CreateFile',结果是'NAME NOT FOUND'
我该怎么做才能解决这个问题?
解决方法
目前我找到了两种方法,
1)在smb.conf中添加“streams_xattr:store_stream_type = no”
2)像这样在我的代码中添加“:$DATA”
size = setxattr(file_name.c_str(),"user.DosStream.easescl:$DATA",scl_data,size,0);
他们都工作了,现在我可以打开文件
然而,我之前设置的xattr的值会在我修改文件并保存后发生变化,我找不到解决方法.....