如何知道文件是通过NSFileManager编写的

时间:2015-06-16 10:25:14

标签: ios objective-c iphone nsfilemanager

我遇到了问题,如何知道该文件是否可访问???

例如,文件正在写入,但尚未完成。 我再次检查文件,

我用

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<View
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="2">

    <View
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />

    <ImageView
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="3" />

    <View
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />
</LinearLayout>

<View
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />

它返回true ...但文件无法访问。

如何确定文件已准备就绪?

谢谢

韦伯

修改 也许我没有清楚地告诉我的问题。我的意思是如果你开始传输视频文件。在运输完成之前。视频文件无法访问,但您仍然可以获取传输文件的一部分。

4 个答案:

答案 0 :(得分:1)

使用GCD概念以异步方式写入数据,一旦完成,将执行完成处理程序。(应检测写入过程的完成)

调度I / O便利API允许您对文件描述符执行异步读写操作。此API支持基于流的语义,用于访问文件描述符的内容。

方法:

django.contrib.auth.views.login

参考:https://developer.apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/index.html#//apple_ref/c/func/dispatch_write

答案 1 :(得分:1)

基本上你需要检查文件的属性,特别是NSFileBusy属性:

if ([fileManager fileExistsAtPath:filePath]) {
    NSDictionary *attributes = [fileManager attributesOfItemAtPath:filePath error:nil];
    NSLog(@"File Busy %@", [attributes objectForKey:NSFileBusy]);
}

答案 2 :(得分:0)

NSFileCoordinatorNSFilePresenter就是为此而创建的。您可以从wwdc中找到有趣的Advanced iCloud Document Storage视频,其中包含此类的用法。 Building a Document-based App也很棒。

答案 3 :(得分:0)

尝试使用以下代码获取文件数据:

NSURL *url = [NSURL fileURLWithPath:filePath];
NSData *readData = [NSData dataWithContentsOfURL:url];