2016-04-14 10 views
1

私は、うまく動作するApplication.persistentDataPathからファイルをダウンロードして保存し、ロードしています。 これで、エディタでうまく動作するが、iosでは動作しないように見えるファイルをいくつか削除したいと思います。Unity3D C#System.IO.File.DeleteがIOSで動作していません

「ファイルが存在しません」と表示されますが、ファイルが正常に読み込まれます。それが存在しない可能性はありますか、おそらくiosで拒否されたことでしょうか?

System.IO.File.Delete (localName); 

ありがとう:

これは、いくつかの時間後に(働く)

string localName = System.IO.Path.Combine(Application.persistentDataPath, filename); 

var www = new WWW(thumbnailLink); 
     yield return www; 
     //Save file 
     System.IO.File.WriteAllBytes (localName, www.bytes); 

をロードするために、私はこのようなファイルを削除したいです!

答えて

1

削除機能を呼び出す前に、ファイル名の前に "/private"を追加します。

System.IO.File.Delete ("/private" +localName); 

このコードは移植性がありません。 #if UNITY_IPHONEを使用してこれがiOSであるかどうかを確認し、Androidでも動作するように変更してください。

#if UNITY_IPHONE 
System.IO.File.Delete ("/private" +localName); 
#else 
System.IO.File.Delete(localName); 
#endif 
+1

これは大きなヒントです。私はいつも不思議に思っていました。私がパスを作るとき、私は単に 'string p = Application.persistentDataPath +"/"+" blah.txt "を使用します;"私はSystem.IO.Path.Combineを使用していません。その場合、iOSで削除するときに/ privateプリパスを使用する必要はありません。しかし、私はそれをチェックする時間がかかりませんでした。 – Fattie

+1

同様に、パスを構築するときに書き込みと削除の両方が一貫しているように、/ private(iOSの場合)を常に「追加」することが問題ではないかと思います。 @JoeBlow。 – Fattie

+0

それでも 'Application.persistentDataPath'が必要です。 'localName'は質問OPからの変数です。それは何かのように見えるはずです 'File.Delete("/private "+ Application.persistentDataPath +"/"+ filename);'あなたの質問のために、これは私が知る限り 'File.Delete'関数にのみ適用されます。それはUnityのバグです。したがって、 'Delete'関数を呼び出すときにのみ使用してください。 – Programmer

関連する問題