2015-05-14 10 views
0

Я читаю настройки с аппаратного устройства и должен записывать их в текстовый файл, один за другим, один на строку. Если файл уже существует, SavePanel спрашивает, хочу ли я его перезаписать. Я отвечаю «да», но файл добавляется.Как перезаписать существующий текстовый файл, а затем добавить к нему

- (IBAction)saveSettings:(id)sender 
{ 
    self.saveSettings = TRUE; 
    self.firstWrite = TRUE; 
    NSSavePanel *saveText = [NSSavePanel savePanel]; 
    [saveText setNameFieldStringValue:@"SavedSettings.txt"]; 
    [saveText setDirectoryURL:[NSURL fileURLWithPath:@"Documents"]]; 
    [saveText setShowsTagField:NO]; 
    NSInteger saveInt = [saveText runModal]; 
    if(saveInt == NSModalResponseOK) 
    { 
    NSURL *pathURL = [saveText URL]; 
    self.pathName = [pathURL path]; 
    [self appendToFile:@"General configuration\n"]; 
    [self appendToFile:@"1\n"]; 
    [self appendToFile:@"1\n"]; 
    [self appendToFile:@"Configuration axis 1\n"]; 
    [self readMoveDelayAxis1]; 
    } 
} 

- (BOOL)appendToFile:(NSString *)strcontent; 
{ 
    BOOL result = YES; 
    NSFileHandle* fh = [NSFileHandle fileHandleForWritingAtPath:self.pathName]; 
if (!fh) 
{ 
    [[NSFileManager defaultManager] createFileAtPath:self.pathName contents:nil attributes:nil]; 
    fh = [NSFileHandle fileHandleForWritingAtPath:self.pathName]; 
} 
if (!fh) return NO; 
@try { 
    [fh seekToEndOfFile]; 
    self.firstWrite = FALSE; 
    [fh writeData:[strcontent dataUsingEncoding:NSUTF8StringEncoding]]; 
} 
@catch (NSException * e) { 
    result = NO; 
} 
[fh closeFile]; 
return result; 
} 

Измененный код в ответ ниже

- (IBAction)saveSettings:(id)sender 
{ 
    self.saveSettings = TRUE; 
    NSSavePanel *saveText = [NSSavePanel savePanel]; 
    [saveText setNameFieldStringValue:@"SavedSettings.txt"]; 
    [saveText setDirectoryURL:[NSURL fileURLWithPath:@"Documents"]]; 
    [saveText setShowsTagField:NO]; 
    NSInteger saveInt = [saveText runModal]; 
    if(saveInt == NSModalResponseOK) 
    { 
     NSURL *pathURL = [saveText URL]; 
     NSFileManager *filemgr; 
     filemgr = [NSFileManager defaultManager]; 

     if ([filemgr fileExistsAtPath:[pathURL path]] == YES) 
     { 
      [filemgr removeItemAtPath:[pathURL path] error: NULL]; 
     } 
     self.pathName = [pathURL path]; 
     [self appendToFile:@"General configuration\n"]; 
     [self appendToFile:@"1\n"]; 
     [self appendToFile:@"1\n"]; 
     [self appendToFile:@"Configuration axis 1\n"]; 
     [self readMoveDelayAxis1]; 
    } 
} 

ответ

2

NSSavePanel UI просто просим пользователь, если файл должен быть переписан, как и с другими NSOpenPanel/NSSavePanel ситуациями он просто возвращает выбранный URL (s) к вашему приложению.

Ваш код должен проверить, существует ли файл и усечь его, если это так, аналогично тому, как он уже проверяет, не существует ли файл и создает его, если это так.

Вы можете использовать методы, такие как truncateFileAtOffset:, такие функции, как ftruncate(2) и т.д.

НТН

Смежные вопросы