问题标签 [nsfilehandle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2655 浏览

objective-c - 如何使用 NSFileHandle 的 readabilityHandler 检查文件结尾?

我正在使用块从 a NSFileHandle(来自 a )读取数据:NSPipereadabilityHandler

这很好用,我得到了我期望提供给我的processData方法的所有数据。问题是我需要知道读取最后一块数据的时间。availableData如果它到达文件末尾,则应该返回一个空NSData实例,但问题是在 EOF 上不会再次调用可达性处理程序。

我找不到任何关于如何在 EOF 上获得某种通知或回调的信息。那么我错过了什么?Apple 真的提供了没有 EOF 回调的异步读取 API 吗?

顺便说一句,我不能使用基于 runloop 的readInBackgroundAndNotify方法,因为我没有可用的 runloop。如果我不能让它与NSFileHandleAPI 一起工作,我可能会直接使用调度源来执行 IO。

0 投票
1 回答
1451 浏览

objective-c - NSFileHandleDataAvailableNotification 文件重复没有新数据(导致非常高的 CPU 使用率)

我正在尝试NSTask使用waitForDataInBackgroundAndNotify. 以下代码确实读取了流,因此它已经部分工作了。

我遇到的问题是,有时NSFileHandleDataAvailableNotification开始重复触发(每秒数千次)而根本没有新数据([data length]返回0)。然后我的进程开始使用大量 CPU,使机器停止运行。你们有没有人在过去遇到过这样的事情?提前致谢。

0 投票
2 回答
12193 浏览

ios - NSSearchPathForDirectoriesInDomains NSUserDomainMask

使用 URLConnection 我正在从 url 下载文件并将该数据存储到文件目录中的文件中。当我收到响应时,当调用 didReceiveResponse: 方法时,我创建文件并以这种方式移动到该文件的末尾:

其中 File 是 NSFileHandle 类的对象。稍后在接收数据时,每当调用 didReceiveData:(NSData *)data 方法时,我都会以这种方式将接收到的数据存储到文件中:

最后,我以这种方式关闭 connectionDidFinishLoading: 方法中的文件:

当我在我的系统中构建和运行时它正在工作。但是当我复制到另一个系统并尝试构建时,我得到了这个错误:

我参考了http://www.techotopia.com/index.php/Working_with_Directories_on_iPhone_OS什么是 NSSearchPathForDirectoriesInDomains?了解 NSSearchPathForDirectoriesInDomain 功能,但我仍然不清楚。

UserDomainMask根据项目所在的系统和用户返回正确的路径。如果是这样,为什么我会收到这样的错误?

他们说返回的路径(存储在文件路径中)将是路径 /Users//Library/Application Support/iPhone Simulator/User/Application//Documents 其中

是当前登录到运行模拟器的 Mac OS X 系统的用户的名称,并且是应用程序的唯一 ID

谁能帮助我,了解为什么我会收到这样的错误。

0 投票
1 回答
3192 浏览

objective-c - 运行 NSUserUnixTask 时出现异常`-[NSConcreteFileHandle readDataOfLength:]: Bad file descriptor`

我用来在我的沙盒应用程序上NSUserUnixTask运行未沙NSTask盒。但是,我的代码挂在对[NSFileHandle readDataToEndOfFile]. 如果我删除这些调用,它会完美运行。如果我用它替换[NSFileHandle readDataToEndOfFile][NSFileHandle availableData]也会挂起。

这是代码:

Xcode 的控制台上没有记录任何内容,但是如果我打开 Console.app,我会看到这一行:

嗯,我该如何解决这个问题?在我将我的应用程序沙盒化之前,我将NSPipe其与 结合使用NSTask并且一切正常,但现在NSUserUnixTask需要使用NSFileHandle代替,我认为我的问题仅仅是因为我没有正确使用它。但我仍然不知道我做错了什么。

0 投票
1 回答
6218 浏览

ios - NSFileHandle writeData:异常处理

这可能是一个相当广泛的问题,但我找不到任何在线资源来解决或解释这个问题。

问题是在创建之后NSFileHandle *writer = [NSFileHandle fileHandleForWritingAtPath:"path"],当您使用时[writer writedata:"NSData"],根据苹果文档可能会触发正弦异常。

“如果文件描述符已关闭或无效,如果接收方表示未连接的管道或套接字端点,如果文件系统上没有剩余空间,或者发生任何其他写入错误,则此方法会引发异常。” - 苹果文档

我只想知道是否有任何方法可以处理或验证这些问题,而无需使用任何 try catch 或在写入前检查条件检查中的每个错误。我们可以用什么方法NSError来处理这个问题?

0 投票
1 回答
3779 浏览

ios - iOS:用于大文件下载的 NSFileHandle 与 NSOutputStream

在 iOS 上,我们的应用程序正在下载一个大约 400MB 的 zip 文件。下载文件时,我们遇到了间歇性崩溃。

目前我正在使用 [NSFileHandle writeData:] 来写入数据,而不是存储在内存中。但我想知道操作系统是否以某种方式将其存储在内存中?

NSOutputStream 会是下载大文件的更好解决方案吗?或者可能是标准的unix文件描述符?

我们的文件句柄是这样设置的:

目前我的 NSURLConnection 委托方法如下所示:

因此,来自请求的数据不会存储或附加到任何其他数据对象。这不应该只是写入磁盘而不影响内存吗?

谢谢

0 投票
1 回答
144 浏览

cocoa - 如何使用 NSFileHandle 获取文件的创建、修改日期和文件类型?

如何使用 NSFileHandle 获取文件的创建、修改日期和文件类型?请帮我解决这个问题。我尝试使用 NSDate,但没有找到解决方案。

0 投票
1 回答
597 浏览

objective-c - 在 Cordova 插件中使用相同的 NSFileHandle 对象时的 EXC_BAD_ACCESS

我在我的 Cordova 插件中遇到了访问问题:我NSFileHandle在 Cordova 调用之间“丢失”了上下文,我最终得到了EXC_BAD_ACCESSSIGABRTUnrecognized Selector sent to instance错误。在 Obj-C 的文档中进行调试和挖掘并没有给我任何线索,因此非常感谢您的帮助!

这是我的代码。首先 - 界面:

和实施:

我打电话startWriting,然后stopWriting使用cordova.exec. 错误发生在最后一行stopWriting。有几次问题奇迹般地消失了,但在大多数情况下,我遇到了上述错误之一。
似乎我的logFile对象无缝关闭了文件,但根据 iOS 文档,这通常发生在NSFileHandle对象被释放时,而我的对象被声明为static,并且只要我的插件存在(另外,我在 XCode 调试器中看到它仍然被分配)。

在您看来,是什么导致我的NSFileHandle对象“丢失”了实际文件?

0 投票
1 回答
1569 浏览

ios - 如何从 NSFileHandle * 获取 FILE *?

旧的解析器依赖于 aFILE *来工作。但是,适用于 iOS 的 Dropbox Sync API 返回 aNSFileHandle *而不是 aFILE *作为文件句柄。

所以我尝试fileDescriptor使用NSFileHandle

- (NSFileHandle )readHandle:(DBError * )error

返回文件的只读文件句柄。如果文件未缓存,则该方法将阻塞,直到文件被下载。退货

如果文件可以读取,则为文件句柄,如果发生错误,则为 nil。

并作为FILE *

但是,有一个EXE_BAD_ACCESS在线fseek

0 投票
3 回答
1653 浏览

ios - 如何使用 NSFileHandle 将数据插入文本文件

我的代码替换文本而不是从 5 符号开始插入:

有没有办法将数据插入文本文件?