2012-02-16 10 views
62

私のコードfileExistsAtPath:のポイントで、私が確認したファイルに対してNOを返します。私はこれで私の頭を傷つけてきたし、なぜこのコードは、このディレクトリに絶対に存在するが、とにかく作成されていないように変更されていない理由を把握することはできません。fileExistsAtPath:存在するファイルに対してNOを返します。

NSError* err = nil; 
NSURL *dir = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory 
                 inDomain:NSUserDomainMask 
               appropriateForURL:nil 
                 create: YES 
                  error:&err]; 
BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:[dir absoluteString]]; 

このコードを実行すると、アプリケーションディレクトリフォルダーが存在し、errは0ですが、まだ存在しません。

これはどのようにすることができますか?

TIA

+0

URLForDirectory場合にもチェックしていない...方法をnilを返します。 – bneely

+0

さらに、作成アクションが同期または非同期であるかどうかはドキュメントに示されていませんが、fileExistsAtPath:callの前に数秒の遅れをとって試してみて、結果が変わるかどうか確認してください。 – bneely

+0

私が言及したように、Errはゼロです。また、ディレクトリのパスにdirが正しく設定されています(コンソールまたはNSLogでその内容が正しく設定されている場合)。このコードを呼び出す前に、ディレクトリはすでに存在しています。私がアプリケーションを2回実行すると、まだ存在するBOOLは0に設定されています。 – Gruntcakes

答えて

129

あなたは[dir path]、ない[dir absoluteString]を使用する必要があります。

+4

あなたは私のコードをデバッグする時間を浪費させたmfの違いは何ですか? – Mazyod

+10

パスは通常のパスを返します。 absoluteStringは文字列としてfile:/// urlを返します。 (lldb)print fileURL.path $ R0 = "/ Users/joshwisenbaker/Library/Developer/CoreSimulator/Devices/4ED0C33D-A9AB-49EF-9AD3-13396E7C3CCA/data/Containers/Shared/AppGroup/D2180E2E- "ファイル:///ユーザー/ joshwisenbaker /ライブラリ/開発者/ CoreSimulator /デバイス/ 4ED0C33D-A9AB-A900-009-00917- 4937-9AD3-13396E7C3CCA/data/Containers/Shared/AppGroup/D2180E2E-A409-430E-AC47-C71353547417/jobs.plist " – macshome

+0

私はパスを使用していますが、毎回falseを返しています –

1

pathとurlは区別されます。 Unix表現のパスは、特定のファイルまたはディレクトリが存在する場所です。同様"/Users/username/Desktop/myfile.txt"

のwheresは、URLは、同様の場所が、スキームが含まれているだけではなく、例えばます。http://またはhttps://と私たちのケースでは、ファイルのURL fileExistsAtPathまたはremoveItemAtPathにパスを必要とするような(file:///Users/username/Desktop/myfile.txt)

方法パラメータではなくURLです。

copyItemAtURL:toURL:error:(NSError * _Nullable *)errorのような方法ではURLが必要ですが。

path属性のNSURLオブジェクトを使用してパスを取得します。 absoluteStringには、スキームとともにパスが表示されます。

4

私は頭を数時間壁に打ちつけていました。どうやら、xcodeの各実行ごとに、アプリディレクトリのパスが変化していました。それのUUID部分。 ので、代わりの私はパス接尾 を持続し、どのようなストレージ・クラスを暗示していることを前に置くことになったのフルパス保存:一時的には、 やドキュメントをキャッシュされた: - [