大家好我們寫了一個在仿真器上工作得很好的程序。但是,當我們上傳項目到我們自己的設備時,它可以讀取文件和顯示項目,但是當它試圖擦除文件並重新寫入時,它不起作用。txt文件寫入在仿真器中工作,但不在真實設備中xcode
什麼可能是可能的問題,以及如何解決這個問題?
大家好我們寫了一個在仿真器上工作得很好的程序。但是,當我們上傳項目到我們自己的設備時,它可以讀取文件和顯示項目,但是當它試圖擦除文件並重新寫入時,它不起作用。txt文件寫入在仿真器中工作,但不在真實設備中xcode
什麼可能是可能的問題,以及如何解決這個問題?
好像你正試圖在應用程序包中寫入文件。出於安全考慮,Apple不會讓您觸摸該軟件包。你必須:
,我認爲它的工作原理在模擬器中,因爲在模擬器中運行應用程序時沒有沙箱。 在您的應用程序沙箱中查找正確文件夾的文檔如下。
編輯:
下面是一些代碼(沒有在Xcode中運行它,可能會有一些錯字錯誤)從束中的文件複製到指定目錄Documents目錄。請注意,此代碼每次都會覆蓋Documents目錄中的文件。
NSString *documentsDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *fileDirectory = [documentsDirectory stringByAppendingPathComponent:@"MyDirectory"];
// Create folder if it does not exist
BOOL isDirectory;
if (![[NSFileManager defaultManager] fileExistsAtPath:fileDirectory isDirectory:&isDirectory])
{
NSError *error;
[[NSFileManager defaultManager] createDirectoryAtPath:fileDirectory withIntermediateDirectories:NO attributes:nil error:&error];
if(error)
{
NSLog(@"Error creating folder : %@",error.localizedDescription);
return;
}
else
{
NSLog(@"Folder created");
}
}
// Save to disk
NSString *filePathOnDisk = [fileDirectory stringByAppendingPathComponent:@"fileInSandbox.foo"];
NSString *pathFromBundle = [[NSBundle mainBundle] pathForResource:@"fileFromBundle" ofType:@"foo"];
NSData *fileData = [NSData dataWithContentsOfFile:pathFromBundle];
NSError *error;
if (![fileData writeToFile:filePathOnDisk options:NSDataWritingAtomic error:&error])
{
NSLog(@"Error writing file : %@", error.localizedDescription);
}
else
{
NSLog(@"File saved to disk successfully");
}
然後,當你想與你複製的文件工作,用我們filePathOnDisk
創建的路徑。
請再次閱讀與文件管理相關的文檔,以瞭解您對文件所做的操作。
請問您可以寫代碼 – Sauvage
[[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; [[NSData data] writeToFile:filePath atomically:YES]; NSFileHandle * handle = [NSFileHandle fileHandleForWritingAtPath:filePath]; [handle truncateFileAtOffset:[handle seekToEndOfFile]]; [handle writeData:[something dataUsingEncoding:NSUTF8StringEncoding]]; – albatross
嘗試使用'NSString * directory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)[0];'作爲目錄。然後完整路徑是這樣的:'directory = [directory stringByAppendingPathComponent:fileName];' – Sauvage