cocoa - NSFileModificationDate 在 SMB 挂载上未正确设置

标签 cocoa nsfilemanager samba smb

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

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

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

我所做的是

  • 将文件(和子目录)从源文件夹复制到目标文件夹
  • 目标文件夹是 SMB 磁盘
  • 复制后,我设置复制文件的修改日期(我仅更改不关心目录的文件的修改日期)
  • 有些文件已正确更新,但有些文件未正确更新(并不总是相同)!!!!!!
  • 不同的smb磁盘有不同的结果(例如winxp挂载、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 磁盘上的一切始终正常工作

最佳答案

看起来没有错误。所以问题似乎出在文件系统驱动程序或服务器端。我不知道你是否可以查看服务器上的日志。无论如何,这似乎超出了你的控制范围。要么忍受这种行为,要么在尝试设置属性值后尝试检查属性值,如果不是您尝试设置的值,请​​重试(最多达到某些重试限制)。

关于cocoa - NSFileModificationDate 在 SMB 挂载上未正确设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21202363/

相关文章:

cvCreateFileCapture奇怪的错误

php - 如何读取文件,如果文件或目录在 Windows 共享驱动器(映射驱动器)上可用,请使用 php

objective-c - 如何确定 NSTimeInterval 是否发生在任意 NSDate 期间?

objective-c - Cocoa/Objective-C Shell 命令行执行

iphone - 将文件下载到 iPhone 中的文件夹

objective-c - 创建文件路径 :contents:attributes storing a NSString

ubuntu - Samba 服务器问题

objective-c - 从 plist 中检索允许的文件类型的聪明方法

objective-c - 修改 NSScroller 的长度

iphone - 获取服务器 iPhone 上目录中的文件列表