2012-06-18 9 views
10

Como tengo que leer un archivo cuando se pone en marcha mi aplicación y escribir a veces mientras que la usa, traté de alcanzarla con:¿Cómo leer/escribir archivos con iOS, en el simulador y en el dispositivo?

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

y el archivo, que debería estar en mi carpeta del proyecto, es decir en vez en la carpeta simulador:

2012-06-13 17: 36: 56.398 MyFileApp [610: 15203]/Usuarios/Rob/Library/Application Support/iPhone Simulator/5.1/Aplicaciones/1FFD4436-DCCA-4280- 9E47-F6474BEE0183/MyFileApp.app/myFile.txt

Entonces, si quiero leer/escribir usando el simulador y el dispositivo real, ¿qué debo hacer?

Gracias por sus consejos

+0

sin necesidad de cambiar – Hector

Respuesta

20

para leer el archivo del paquete de haga lo siguiente

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

Para leerlo desde su almacenamiento caja de arena (documentos)

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

escribir en el documento carpeta

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

Tenga en cuenta que no será capaz de escribir el archivo en la carpeta de paquete de la aplicación

+1

Si utilizo un archivo de mi carpeta de documentos, funcionará con el simulador, pero cuando uso mi aplicación en un dispositivo, ¿qué debo hacer? Use la carpeta del paquete? – Rob

+2

No, este código funcionará tanto en el simulador como en el dispositivo :) –

+0

Bien, veo lo que haces usando NSHomeDirectory. Muchas gracias ! – Rob

1

Para escribir archivos son los métodos -[NSData writeToURL:atomically:] y -[NSString writeToURL:atomically:encoding:error:] se pueden utilizar si se vincula con el marco de la Fundación.

Para leer archivos, los métodos son -[NSData initWithContentsOfURL:options:error:] y -[NSString initWithContentsOfURL:encoding:error:].

2

Esto es lo que necesita para escribir y leer un archivo de texto:

escribir un archivo:

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

y leer un archivo:

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

y finalmente probar mi código en 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 
Cuestiones relacionadas