簡體   English   中英

在iOS中使用NSFileManager寫入文件

[英]Writing file with NSFileManager in iOS

(我不是英語母語人士。抱歉我的英語不好...)

我使用此代碼成功寫入了文件。

// worked code...

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingString:@"myfile.txt"];

NSString *myStr = @"this is a string";

if( ! [myStr writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:NULL] )
  return FALSE;
else
  return TRUE;

現在,我想使用NSFileManager更改此代碼。 所以,我嘗試了這樣。

// not worked code...

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingString:@"myfile.txt"];

NSString *myStr = @"this is a string";
NSData *fileData = [myStr dataUsingEncoding: NSUTF8StringEncoding];
NSFileManager *fm;

if( [fm createFileAtPath: filePath contents: fileData attributes: nil] == NO )
  return FALSE;
else
  return TRUE;

每當我構建此代碼時,它都會一直返回為false ...我做錯了嗎? 請幫我

區別基本上是NSFileManager方法不會覆蓋現有文件,因為NSString方法

NSFileManager 參考

返回值

YES如果操作成功,或者如果該項目已經存在,否則NO

NSString 參考

討論區

此方法將覆蓋路徑上的所有現有文件。

如果您始終要寫入數據的新副本,請先檢查文件是否存在,然后刪除該文件。

:您不應該使用[NSString stringByAppendingString:]構造文件路徑; 而是使用[NSString stringByAppendingPathComponent:] ; 因此,我希望您甚至都不會寫出您認為是的文件。

更好的是,使用NSURL來引用文件; 這是首選方法。

您的NSFileManager尚未設置為任何文件管理器。

相反,您應該嘗試使用帶有以下代碼的defaultManager對其進行初始化。

NSFileManager *fm = [NSFileManager defaultManager]; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM