2013-10-13 14 views
22

でのドキュメントディレクトリに保存するテキストファイルには、私のコードです:ここではのiOS 7

//Saving file 
NSFileManager *fileManager = [[NSFileManager alloc] init]; 
NSArray *urls = [fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]; 

NSString *url = [NSString stringWithFormat:@"%@", urls[0]]; 

NSString *someText = @"Random Text To Be Saved"; 
NSString *destination = [url stringByAppendingPathComponent:@"File.txt"]; 

NSError *error = nil; 

BOOL succeeded = [someText writeToFile:destination atomically:YES encoding:NSUTF8StringEncoding error:&error]; 

if (succeeded) { 
    NSLog(@"Success at: %@",destination); 
} else { 
    NSLog(@"Failed to store. Error: %@",error); 
} 

は、私が取得していますエラーです:

2013-10-13 16:09:13.848 SavingFileTest[13675:a0b] Failed to store. Error: Error Domain=NSCocoaErrorDomain Code=4 "The operation couldn’t be completed. (Cocoa error 4.)" UserInfo=0x1090895f0 {NSFilePath=file:/Users/Username/Library/Application%20Support/iPhone%20Simulator/7.0-64/Applications/F5DA3E33-80F7-439B-A9AF-E8C7FC4E1630/Documents/File.txt, NSUserStringVariant=Folder, NSUnderlyingError=0x10902aeb0 "The operation couldn’t be completed. No such file or directory"} 

なぜこのエラーがシミュレータ上で実行されているのかわかりません。これは、NSTemporaryDirectory()を使用する場合に機能します。 AppleのXcodeのテンプレートから

+0

をそのディレクトリが存在することを確認しました?有効なコード – madmik3

+0

のように見えます。ターミナルで次のようにタイプしました。cd Library/Application Support。アプリケーションサポートのためにスペースを正しく入力することはできません。 –

+0

パスの前後に引用符を追加 – madmik3

答えて

48

/** 
Returns the URL to the application's Documents directory. 
*/ 
- (NSURL *)applicationDocumentsDirectory { 
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory 
     inDomains:NSUserDomainMask] lastObject]; 
} 

あなたはこのように保存することができます:

NSString *path = [[self applicationDocumentsDirectory].path 
         stringByAppendingPathComponent:@"fileName.txt"]; 
[sampleText writeToFile:path atomically:YES 
         encoding:NSUTF8StringEncoding error:nil]; 
+0

ありがとうございました。出来た! –

+0

@Mundiなぜアプリケーションディレクトリが 'NSURL'オブジェクトの配列の' lastObject'であるべきなのか不思議ですね。 – Cong

+2

便宜。期待される結果は1つの要素を持つ配列なので、 '[0]'(配列がなんとか空であればクラッシュする可能性があります)、 'firstObject'や' lastObject'(クラッシュしないで 'nil ')。スウィフトは – Mundi

1
-(void)writeATEndOfFile:(NSString *)content2 
    { 
     NSArray *paths = NSSearchPathForDirectoriesInDomains 
     (NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 

     //make a file name to write the data to using the documents directory: 
     NSString *fileName = [NSString stringWithFormat:@"%@/textfile.txt", 
           documentsDirectory]; 

     if([[NSFileManager defaultManager] fileExistsAtPath:fileName]) 
     { 
      NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:fileName]; 
      [fileHandle seekToEndOfFile]; 
      NSString *writedStr = [[NSString alloc]initWithContentsOfFile:fileName encoding:NSUTF8StringEncoding error:nil]; 
      content2 = [content2 stringByAppendingString:@"\n"]; 
      writedStr = [writedStr stringByAppendingString:content2]; 

      [writedStr writeToFile:fileName 
         atomically:NO 
          encoding:NSStringEncodingConversionAllowLossy 
          error:nil]; 
     } 
     else { 
      int n = [content2 intValue]; 
      [self writeToTextFile:n]; 
     } 

    } 


-(void) writeToTextFile:(int) value{ 
     //get the documents directory: 
     NSArray *paths = NSSearchPathForDirectoriesInDomains 
     (NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 

     //make a file name to write the data to using the documents directory: 
     NSString *fileName = [NSString stringWithFormat:@"%@/textfile.txt", 
           documentsDirectory]; 
     //create content - four lines of text 
     // NSString *content = @"One\nTwo\nThree\nFour\nFive"; 

     NSString *content2 = [NSString stringWithFormat:@"%d",value]; 
     content = [content2 stringByAppendingString:@"\n"]; 
     //save content to the documents directory 
     [content writeToFile:fileName 
        atomically:NO 
        encoding:NSStringEncodingConversionAllowLossy 
         error:nil]; 

    } 
2

スウィフトでムンディの答え:

let fileName = "/File Name.txt" 
    let filePath = self.applicationDocumentsDirectory().path?.stringByAppendingString(fileName) 

    do { 
     try strFileContents.writeToFile(filePath!, atomically: true, encoding: NSUTF8StringEncoding) 
     print(filePath) 
    } 
    catch { 
     // error saving file 
    } 

func applicationDocumentsDirectory() -> NSURL { 

    return NSFileManager.defaultManager().URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask).last! 
} 
関連する問題