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

时间:2012-05-03 08:36:09

标签: iphone objective-c c

我想将一些数据写入文本文件,但我总是“错误”,因为bytesWritten的值为-1。我已经调试过dataLength和dataBytes都没问题,我想我有权在桌面上创建文件。造成这种情况的原因是什么?如何解决?代码如下:

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;
}
}

1 个答案:

答案 0 :(得分:2)

在写入之前,您必须在流上调用-open。如果您阅读the documentation,请注意:

  

<强>讨论

     

必须先打开流才能使用它。

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