如何判断文件是不是已通过 NSFileManager ios 上传

Posted

技术标签:

【中文标题】如何判断文件是不是已通过 NSFileManager ios 上传【英文标题】:How to tell if a file has been uploaded through NSFileManager ios如何判断文件是否已通过 NSFileManager ios 上传 【发布时间】:2015-04-17 17:52:08 【问题描述】:

我正在将文件上传到 Dropbox,我想知道是否可以通过 NSFileManager 标记任何内容以测试文件是否已上传。我一直在梳理文档,但还没有找到任何有用的东西。

例如,如果我上传了一个名为 song.m4a 的文件,并且用户在应用程序中更改了该文件的名称,我将如何确定该文件是否已使用新名称上传以免文件再次上传?

是否可以设置任何属性或属性来查看文件是否已上传?

谢谢。

【问题讨论】:

【参考方案1】:

您可以使用散列,例如您可以计算文件的MD5哈希并将其存储在手机上的本地文件中,当用户尝试上传文件时,您无需检查其名称,您只需重新计算MD5哈希并检查它是否存在于您的本地文件,如果有,则之前上传过一次。

编辑:

您可以将任何内容转换为 NSData,然后计算该 NSData 的哈希值,例如在您的情况下,您可以像这样加载文件

NSData* data = [NSData dataWithContentsOfFile:yourFilePath];

然后你可以像这样散列它

- (NSString*)MD5:(NSData*)input

  // Create byte array of unsigned chars
  unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];

  // Create 16 byte MD5 hash value, store in buffer
  CC_MD5(input.bytes, input.length, md5Buffer);

  // Convert unsigned char buffer to NSString of hex values
  NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
  for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) 
    [output appendFormat:@"%02x",md5Buffer[i]];

  return output;

别忘了导入

#import <CommonCrypto/CommonDigest.h>

【讨论】:

我查看了散列的示例,我想知道,是否需要使用 NSString 来计算散列?还是 NSData?还是会有所作为?我不熟悉散列,我想知道用户通过重命名文件来更改 NSString 是否会更改散列计算。原谅我的无知。 您可以从 NSString 或 NSData 计算哈希,所有数据都可以转换为 NSData,因为所有数据都是字节,我将编辑我的答案,请检查它

以上是关于如何判断文件是不是已通过 NSFileManager ios 上传的主要内容,如果未能解决你的问题,请参考以下文章

java如何判断Linux系统文件是不是被占用

PHP如何判断是不是是MP3文件

NSFileManager的应用

我如何使用 objdump 之类的东西来判断是不是使用 -fPIC 构建了目标文件?

java 如何判断文件路径是不是存在

Shell脚本判断文件是不是存在