2012-06-18 2 views
10

が、私はそれに到達しようとした:私のプロジェクトフォルダ内にある必要がありiOS、シミュレータ、デバイス上のファイルの読み書き方法は?私は私のアプリが起動し、ファイルを読み込み、それを使用しながら、時にはそれを書く必要があるとして

NSString *dataFile = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"txt"]; 
NSLog(@"%@",dataFile); 

し、ファイル、代わりにあります

2012-06-13 17:36:56.398 MyFileApp [610:15203] /ユーザ/ロブ/ライブラリ/ Application Support/iPhoneシミュレータ/ 5.1 /アプリケーション/ 1FFD4436-DCCA-4280-シミュレータフォルダに9E47-F6474BEE0183/MyFileApp.app/myFile.txt

実際のデバイスと同様にシミュレータを使用して読み書きする場合、どうすればよいですか?バンドルからファイルを読み込むために

あなたのアドバイスのおかげで

+0

変更する必要はありません – Hector

答えて

20

は、文書に書き込むには、あなたのサンドボックスストレージ(文書)

NSString *docPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/YourFile.txt"]; 
NSString *dataFile = [NSString stringWithContentsOfFile:docPath 
              usedEncoding:NSUTF8StringEncoding 
                error:NULL]; 

からそれを読み込むには、次の

NSString *dataFile = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"txt"]; 

を行いますフォルダ

NSString *docPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/YourFile.txt"]; 
[dataFile writeToFile:docPath 
      atomically:YES 
      encoding:NSUTF8StringEncoding 
       error:NULL]; 

アプリケーションのバンドルフォルダにファイルを書き込むことができませんのでご注意ください。

+1

私のドキュメントフォルダからファイルを使用すると、シミュレータで動作しますが、デバイス上で自分のアプリケーションを使用すると、何をするのですか?バンドルフォルダを使用しますか? – Rob

+2

いいえ、このコードはシミュレータとデバイスの両方で動作します:) –

+0

右、NSHomeDirectoryを使って何をしているのか分かります。どうもありがとう ! – Rob

1

書き込みファイルの場合、方法は-[NSData writeToURL:atomically:]-[NSString writeToURL:atomically:encoding:error:]です。これはFoundationフレームワークにリンクする場合に使用できます。

ファイルを読み込む方法は、-[NSData initWithContentsOfURL:options:error:]-[NSString initWithContentsOfURL:encoding:error:]です。ここで

2

は、ファイルのテキストを読み書きするために必要なものです:

は、ファイル書き込み:

-(void) writeStringToFile:(NSString *)aString{ 
    NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *fileName = @"textFile.txt"; 
    NSString *fileAtPath = [filePath stringByAppendingString:fileName]; 
    if (![[NSFileManager defaultManager] fileExistsAtPath:fileAtPath]) { 
     [[NSFileManager defaultManager] createFileAtPath:fileAtPath contents:nil attributes:nil]; 
    } 
    [[aString dataUsingEncoding:NSUTF8StringEncoding] writeToFile:fileAtPath atomically:NO]; 
} 

をして、ファイルの読み取り:

-(NSString *)readStringFromFile{ 
    NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *fileName = @"textFile.txt"; 
    NSString *fileAtPath = [filePath stringByAppendingString:fileName]; 
    return [[NSString alloc] initWithData:[NSData dataWithContentsOfFile:fileAtPath] encoding:NSUTF8StringEncoding]; 
} 

、最終的に私は自分のコードをテストしますviewDidLoad

NSString *text = @"I'm an iOS developer and I'm living at HCM city"; 
    [self writeStringToFile:text]; 
    NSString *strResult = [self readStringFromFile]; 
    NSLog(@"%@", strResult); 
0
#import "ViewController.h" 

@interface ViewController() 

@property (strong, nonatomic) IBOutlet UITextView *txtWriteText; 
@property (strong, nonatomic) IBOutlet UIButton *btnWriteFile; 
@property (strong, nonatomic) IBOutlet UIButton *btnReadFile; 
@property (strong, nonatomic) IBOutlet UILabel *lblReadText; 

- (IBAction)btnWriteFileTouched:(id)sender; 
- (IBAction)btnReadFileTouched:(id)sender; 

@property NSFileManager *filemgr; 
@property NSString *docsDir; 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    _filemgr =[NSFileManager defaultManager]; 
    NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
    _docsDir = dirPaths[0]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
} 

- (IBAction)btnWriteFileTouched:(id)sender { 
    NSString *filePath = [_docsDir stringByAppendingPathComponent: @"texfile.txt"]; 
    NSData *databuffer = [@"PREFIX: " dataUsingEncoding: NSASCIIStringEncoding]; 
    [_filemgr createFileAtPath: filePath contents: databuffer attributes:nil]; 

    NSFileHandle *file = [NSFileHandle fileHandleForWritingAtPath:        filePath]; 
    if (file == nil){ 
     NSLog(@"Failed to open file"); 
     return; 
    } 

    NSMutableData *data = [NSMutableData dataWithData:[_txtWriteText.text dataUsingEncoding:NSASCIIStringEncoding]]; 

    [file seekToEndOfFile]; 
    [file writeData: data]; 
    [file closeFile]; 
} 

- (IBAction)btnReadFileTouched:(id)sender { 
    NSString *filePath = [_docsDir stringByAppendingPathComponent: @"texfile.txt"]; 
    NSData *databuffer; 
    NSFileHandle *file = [NSFileHandle fileHandleForReadingAtPath: filePath]; 
    if (file == nil){ 
     NSLog(@"Failed to open file"); 
     return; 
    } 

    databuffer = [file readDataToEndOfFile]; 
    [file closeFile]; 

    NSString *datastring = [[NSString alloc] initWithData: databuffer encoding:NSASCIIStringEncoding]; 
    _lblReadText.text = datastring; 
} 

@end 
関連する問題