2015-05-14 41 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)

HTH

相關問題