在SMB安装上未正确设置NSFileModificationDate

时间:2014-01-18 09:34:50

标签: cocoa nsfilemanager samba smb

我使用NSFileManager setAttribute来设置文件的修改日期。

一切正常但当我在某些SMB磁盘上执行此操作时,有时会以非确定性方式更改日期。

为简单起见,下面显示的代码不会检查错误,但在实际代码中,所有API调用都会返回成功,因此无法理解它不起作用

我的工作是

  • 将文件(和子目录)从源文件夹复制到目标文件夹
  • 目标文件夹是SMB磁盘
  • 复制后我设置了复制文件的修改日期(我只修改了我不管理目录的文件的修改日期)
  • 某些文件已正确更新,但有些文件没有(并非总是相同)!!!!!!
  • 不同的smb磁盘有不同的结果(例如winxp mount,buffalo)
  • 我的代码在一个单独的线程中运行

我使用的代码是

NSString* srcPath = @"/Volumes/smbtest/folder-1/ATKXP.INF";
NSString* destPath = @"/Volumes/smbtest/folder-2/ATKXP.INF";


NSDictionary* srcAttrs = [[NSFileManager defaultManager] attributesOfItemAtPath:srcPath
                                                                          error:nil];
[[NSFileManager defaultManager] copyItemAtPath:srcPath
                                        toPath:destPath
                                         error:nil];

NSDictionary* dateAttrs = [NSDictionary dictionaryWithObjectsAndKeys:
                           srcAttrs.fileCreationDate, NSFileCreationDate,
                           srcAttrs.fileModificationDate, NSFileModificationDate,
                           nil];

[[NSFileManager defaultManager] setAttributes:dateAttrs
                                 ofItemAtPath:destPath
                                        error:nil];

一切都在本地HFS磁盘上正常工作

1 个答案:

答案 0 :(得分:1)

看起来不是一个错误。所以问题似乎在文件系统驱动程序或服务器端。我不知道你是否能够查看服务器上的日志。无论如何,它似乎超出了你的控制范围。要么尝试设置它,要么尝试检查属性值,如果它不是您尝试设置的属性值,请再试一次(最多一些重试限制)。