Ví dụ, tôi muốn viết ra một số giá trị chuỗi, str
, vào một tệp, "yy"
, vì nó thay đổi thông qua mỗi lần lặp của một vòng lặp. Dưới đây là cách tôi đang thực hiện điều đó:Cách tiếp cận điển hình được thực hiện để viết các đối tượng NSString vào một tệp là gì?
NSOutputStream *oStream = [[NSOutputStream alloc] initToFileAtPath:@"yy" append:NO];
[oStream open];
while (...)
{
NSString *str = /* has already been set up */
NSData *strData = [str dataUsingEncoding:NSUTF8StringEncoding];
[oStream write:r(uint8_t *)[strData bytes] maxLength:[strData length]];
...
}
[oStream close];
Bỏ qua bảng mã UTF-8, mà tôi đòi hỏi, là thế này thế nào NSString
s thường được ghi vào một tập tin? Tức là, trước hết chuyển đổi thành đối tượng NSData
, sau đó sử dụng bytes
và truyền kết quả đến uint8_t
cho NSOutputStream
's write
?
Có các lựa chọn thay thế nào được sử dụng thường xuyên hơn không?
EDIT: Nhiều NSString
s cần được nối vào cùng một tệp, do đó vòng lặp ở trên.
Có phải trường hợp tệpHandleForWritingAtPath yêu cầu tệp đó đã tồn tại không? –
Không, nó sẽ tạo ra một tệp mới trong mọi trường hợp (loại bỏ tệp cũ nếu đã tồn tại). Xem tài liệu NSFileHandle để biết chi tiết về các hàm tạo khác có thể nối thêm vào các tệp hiện có. –
Là một người mới bắt đầu Cocoa, tôi đến đây để biết thông tin, đã thử điều này, và 'fileHandleForWritingAtPath' luôn cho tôi' null' cho các tệp không tồn tại. Tôi đã phải sử dụng một POSIX 'open()' với 'O_CREAT' để tạo tệp đầu tiên. Có ai có làm rõ thông tin về điều này không? –