iphone - 当我想使用outputStream创建文件时,我总是得到-1

标签 iphone objective-c c

我想将一些数据写入文本文件,但我总是得到“错误”,因为 bytesWritten 的值为 -1。我已经调试过,数据长度和数据字节都可以,并且我认为我有权在桌面上创建文件。造成这种情况的原因是什么?我该如何解决?代码如下:

void savedata(NSData *data)
{
    NSInteger       dataLength;
    const uint8_t * dataBytes;
    NSInteger       bytesWritten;
    NSInteger       bytesWrittenSoFar;
    dataLength = [data length];
    dataBytes  = [data bytes];

    NSOutputStream *fileStream = [NSOutputStream outputStreamToFileAtPath:@"~/Desktop/12.txt" append:NO];

    bytesWrittenSoFar = 0;
    do {
        bytesWritten = [fileStream write:&dataBytes[bytesWrittenSoFar] maxLength:dataLength - bytesWrittenSoFar];
        assert(bytesWritten != 0);
        if (bytesWritten == -1) {
            NSLog(@"Wrong!");
            break;
        } else {
            bytesWrittenSoFar += bytesWritten;
        }
    } while (bytesWrittenSoFar != dataLength);
}

int main(int argc, const char * argv[])
{
    @autoreleasepool {
NSData* data = [@"sadas" dataUsingEncoding:NSUTF8StringEncoding];

savedata(data);

return 0;
}
}

最佳答案

在写入流之前,您必须对流调用-open。如果您阅读the documentation有一个小注释:

Discussion

The stream must be opened before it can be used.

以后出现问题时,您还可以通过查询-streamStatus-streamError方法来获取更多信息。

关于iphone - 当我想使用outputStream创建文件时,我总是得到-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10427805/

相关文章:

iphone - 如何在 UIWebView 中进行搜索?

objective-c - 为什么不使用界面生成器

c - 在 C 中调用 fgets 时出现段错误

iphone - 我必须在 objective-c ios 编程中使用非原子属性吗?

iphone - iOS获取当前地址名称-mkplacemark?

ios - Apple 使用什么来检测内存泄漏?

ios - 如何在 iOS 中将大文件 block 明智地上传到 Azure blob 时减少内存使用量?

c++ - 函数声明中的 WINAPI 标识符 DLL 入口函数中的 C++

arrays - C:定义具有 64 位对齐起始地址的数组的可移植方法?

iphone - 在 iPhone 4s 上运行应用程序时出现 Xcode 4.3.2 错误