2011-01-24 25 views
19

Điều hướng ứng dụng của tôi dựa. UItextView cho ghi chú UIViewController. Tôi đang viết dữ liệu cho văn bản vào tập tin. Bây giờ tôi cần phải viết trong chế độ phụ thêm, các mã dưới đây tôi đang cố gắng nhưng mỗi lần được viết hai lần với cùng một dữ liệu văn bản, và không phụ thêm nếu dữ liệu văn bản tiếp theo để tập tin.cách viết ở chế độ nối thêm cho tập tin văn bản

- (void)saveText:(id)sender 
{ 
    [self.textview resignFirstResponder]; 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [documentPaths objectAtIndex:0]; 
    NSString *documentTXTPath = [documentsDirectory stringByAppendingPathComponent:@"Notes.txt"]; 
    NSString *savedString = textview.text; 
    [savedString writeToFile:documentTXTPath atomically:YES]; 


    NSFileHandle *myHandle = [NSFileHandle fileHandleForUpdatingAtPath:documentTXTPath ]; 
    [myHandle seekToEndOfFile]; 
    [myHandle writeData: [savedString dataUsingEncoding:NSUTF8StringEncoding]]; 
    [myHandle closeFile]; 

} 

Trả lời

29

Tháo dòng mã sau đây

[savedString writeToFile:documentTXTPath atomically:YES]; 

Và mã còn lại đều tốt. Dù sao kiểm tra mã của tôi cũng có,

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *documentTXTPath = [documentsDirectory stringByAppendingPathComponent:@"Notes.txt"]; 
    NSString *savedString = textview.text; 
    NSFileHandle *myHandle = [NSFileHandle fileHandleForWritingAtPath:documentTXTPath]; 
    [myHandle seekToEndOfFile]; 
    [myHandle writeData:[savedString dataUsingEncoding:NSUTF8StringEncoding]]; 
+0

Nếu xóa [savedString writeToFile: documentTXTPath atomically: YES]; tệp không được tạo để viết. – SOF

+2

Một khi bạn đã nộp nó sẽ thêm phụ thêm. đầu tiên xóa tập tin văn bản của bạn trong thư mục tài liệu và ghi vào tập tin và kiểm tra, tập tin có hoặc không có trong tài liệu. vì tôi không thể xem tệp văn bản trong thư mục tài liệu của mình. – SOF

+0

stderr là viết cho đăng nhập, tôi đã thử như freopen ([documentTXTPath cStringUsingEncoding: NSASCIIStringEncoding], "a +", stdout); nó hoạt động tốt. văn bản là appeding, nhưng, nếu văn bản đã có trong UITEXTView nó được viết một lần nữa của cùng một văn bản. – SOF

23

Hãy thử điều này nó hoạt động tuyệt vời

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *documentTXTPath = [documentsDirectory stringByAppendingPathComponent:@"Notes.txt"]; 
NSString *savedString = textview.text; 

Nếu tập tin Không tồn tại tạo ra nó và ghi vào tập tin hoặc nếu không nó append đã tạo ra để kết thúc của tập tin

NSFileManager *fileManager = [NSFileManager defaultManager]; 
if(![fileManager fileExistsAtPath:documentTXTPath]) 
{ 
    [savedString writeToFile:documentTXTPath atomically:YES]; 
} 
else 
{ 
    NSFileHandle *myHandle = [NSFileHandle fileHandleForWritingAtPath:documentTXTPath]; 
    [myHandle seekToEndOfFile]; 
    [myHandle writeData:[savedString dataUsingEncoding:NSUTF8StringEncoding]]; 
} 
+0

Đây là câu trả lời hay hơn KingOfBliss vì nó rất quan trọng để tạo tệp nếu nó chưa tồn tại –

-1

Bạn cũng có thể làm

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *documentTXTPath = [documentsDirectory stringByAppendingPathComponent:@"Notes.text"]; 
NSString *content = [NSString stringWithContentsOfFile:documentTXTPath encoding:NSUTF8StringEncoding error:nil]; 
content = [content stringByAppendingString:data]; 

Và một lần nữa ghi nội dung vào đường dẫn tệp cụ thể

[content writeToFile:documentTXTPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; 
Các vấn đề liên quan