質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

961閲覧

プロジェクト内にファイルがあるか確認したい

testyoutatsu

総合スコア29

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/08/05 16:40

前提・実現したいこと

プロジェクト内の.csvファイルを読み込み配列にするプログラムを作っています。

プロジェクト内に読み込む前にファイルが存在するかをチェックしたいと思いいくつかのサイトを参考にしながら以下のようなプログラムを書きました。
test.csvは確かに存在しています。しかしabc()は"FILE NOT AVAILABLE"、def()は"ファイルなし"と表示されてしまいます。

このコードではファイルの有無を確認することができないのでしょうか?

ファイルは プロジェクトファイル名>フォルダ>フォルダ>フォルダ の中にあります。
ファイルをプロジェクトに追加するときにAdd to targetsにチェックは入れました。

ソースコード

Swift

1 func abc() { 2 let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String 3 let url = NSURL(fileURLWithPath: path) 4 if let pathComponent = url.appendingPathComponent("test.csv") { 5 let filePath = pathComponent.path 6 let fileManager = FileManager.default 7 if fileManager.fileExists(atPath: filePath) { 8 print("FILE AVAILABLE") 9 } else { 10 print("FILE NOT AVAILABLE") 11 } 12 } else { 13 print("FILE PATH NOT AVAILABLE") 14 } 15 } 16 17 18 func def() { 19 let startPeriodMstr = String(format: "%02d", startPeriodM) 20 let startPeriodDstr = String(format: "%02d", startPeriodD) 21 if (FileManager.default.fileExists(atPath: "test.csv")) { 22 print("ファイルあり") 23 } else { 24 print("ファイルなし") 25 } 26 } 27

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

あまりよく知らないのでサラッと書きますが、

  • test.csvはドキュメントフォルダにあるわけではないので、abc()ではパスが間違っていることになります。
  • def()ではtest.csvしか指定していないため、パスが不完全です。

swift

1if let path = Bundle.main.path(forResource: "test", ofType: "csv") { 2 print("exists", path) 3 //=> exists /var/containers/Bundle/Application/(中略)/ProjectName.app/test.csv 4 5 //このpathを与えてやれば.fileExistsでも判別できる 6 print(FileManager.default.fileExists(atPath: path)) 7 //=> true 8} else { 9 print("does not exist") 10}

投稿2018/08/06 00:21

編集2018/08/06 00:23
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

testyoutatsu

2018/08/06 04:18

なるほど、ここでBundle.main.path(forResource: , ofType: )を使うのですね。 書き換えてビルドしたところ無事ファイルの存在を確認することができました。回答ありがとうございました。
guest

0

蛇足ですが、プロジェクト内ということであれば、以下メソッドをご利用されるとよろしいかと。
Bundle.main.url

投稿2018/08/06 01:41

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問