0

请原谅我蹩脚的英语

我尝试使用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_xattrhttps://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'

我应该怎么做才能解决这个问题?

4

1 回答 1

0

到目前为止,我找到了两种方法,

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 的值将被更改,我找不到解决它的方法.....

于 2021-03-08T10:09:28.913 回答