samba(v 4.10.16) win10无法打开centos7中通过setxattr()设置扩展属性的文件如.xlsx .pptx

问题描述

请原谅我蹩脚的英文

我尝试使用 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的值会在我修改文件并保存后发生变化,我找不到解决方法.....