読み込むファイルをiPhoneの中に書き込みたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
bonbo

読み込むファイルをiPhoneの中に書き込みたい

#1

投稿記事 by bonbo » 13年前

連日トピックを立ててしまい申し訳ありません。
以下のコードで読み込みたいapple.testというファイルがあるのですが
そのファイルをiPhoneの中に書き込む方法が分からず困っています。
どうすればよいのでしょうか。

(書き込みたい
→書き込むファイルを読み込みたい
→書き込むファイルがiphoneの中にはない
→読み込めない
→そのため、fwrite以外の方法でiphoneの中にファイルを書き込みたい。)

コード:

int Load(){
    FILE *fp;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"apple.test"];                          // apple.testを読み込みたい
    NSLog(@"path:%@",path);
    fp = fopen([path cStringUsingEncoding:1],"rb");                   // 当然ファイルは存在しないのでfp==NULLとなってしまう。
    if(fp==NULL){
        fclose( fp ) ;
        NSLog(@"failed1");
        return -1;
    }
//
//読み込み処理
//
    fclose( fp ) ;
    NSLog(@"ここまできた");
    return 0;
}
環境は
Xcode4.4,iPhone4Sです

分かりづらい文章で申し訳ありません。よろしくおねがいします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 読み込むファイルをiPhoneの中に書き込みたい

#2

投稿記事 by softya(ソフト屋) » 13年前

iPhoneはよく知りませんが、fopenの仕様は調べましたか?
そして"rb"の意味は理解できていますでしょうか?
「Man page of FOPEN」
http://linuxjm.sourceforge.jp/html/LDP_ ... pen.3.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

bonbo

Re: 読み込むファイルをiPhoneの中に書き込みたい

#3

投稿記事 by bonbo » 13年前

>softyaさん
ありがとうございます。
"rb"は確か
バイナリモードで書き込み。ですよね。
バイナリモードとは改行などのエスケープシーケンスを無視して書き込むモード…ではないでしょうか。
>fopenの仕様
やっぱり環境によって変わってくるものなのでしょうか…
ディレクトリの指定の方法が変わったけど同じ関数だと思っていました。
fopen Xcodeで検索しても特別おかしな情報は出てきませんでしたが…

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 読み込むファイルをiPhoneの中に書き込みたい

#4

投稿記事 by softya(ソフト屋) » 13年前

>"rb"は確かバイナリモードで書き込み。ですよね。

いえ。すごく素直に作られているので、そういう誤解が入るとは思いませんでした。
r ・・・ read
b ・・・ binary
です。

>やっぱり環境によって変わってくるものなのでしょうか…

C言語の基本仕様の部分は変わりませんよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

bonbo

Re: 読み込むファイルをiPhoneの中に書き込みたい

#5

投稿記事 by bonbo » 13年前

見間違えました…お恥ずかしい…
wbがwrite binaryです…

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 読み込むファイルをiPhoneの中に書き込みたい

#6

投稿記事 by softya(ソフト屋) » 13年前

そうです。"wb"でオープンしてfwriteすればファイルが出来上がります。
ただ、質問で分からないところがあって、存在しないファイルを読み取りたいと言っているようにも受け取れるのですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

bonbo

Re: 読み込むファイルをiPhoneの中に書き込みたい

#7

投稿記事 by bonbo » 13年前

>fopen
正直理解しないまま便利な関数として使っていましたからもやもやしています。
明日東京に行くので書籍あさってみます。
>ただ、質問で分からないところがあって、存在しないファイルを読み取りたいと言っているようにも受け取れるのですが。
へたな文章で申し訳ありません…確かにそうですね。

今の問題は
 「windowsで作ったデータを別環境で読み取る方法がよくわからないこと」
なのです。

iPhoneの中にあるデータを読み込む方法はわかっているのですが、
( http://dixq.net/forum/viewtopic.php?f=3&t=12638 ここで解決しました。)
リソースとして添付させたファイルを読み込む方法はわからないので、その作ったデータを添付させても、
読み込むことができないのです。

分かりづらいですね…

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 読み込むファイルをiPhoneの中に書き込みたい

#8

投稿記事 by softya(ソフト屋) » 13年前

私はiPhone環境独特の部分は分からないです。
iPhoneアプリのリソースとして添付したテキストファイルが読めないので困っているって事でよろしいでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

bonbo

Re: 読み込むファイルをiPhoneの中に書き込みたい

#9

投稿記事 by bonbo » 13年前

>iPhoneアプリのリソースとして添付したテキストファイルが読めないので困っているって事でよろしいでしょうか?
はい。そうです。形式は.txtではないですが。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 読み込むファイルをiPhoneの中に書き込みたい

#10

投稿記事 by h2so5 » 13年前

答えは既に出ていますよ。
h2so5 さんが書きました: iOSではアプリから書き込めるディレクトリが制限されています。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 読み込むファイルをiPhoneの中に書き込みたい

#11

投稿記事 by softya(ソフト屋) » 13年前

MacもiPhoneも無いので確認できないですが、次のようなものではなにでしょうか?
「列挙し、iPhone アプリのリソースの読み込み方法」
http://ja.softuses.com/114678
と言うことでNSBundleを調べられたほうが良いかなって思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

bonbo

Re: 読み込むファイルをiPhoneの中に書き込みたい

#12

投稿記事 by bonbo » 13年前

気づいたのですが、

コード:

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"apple.test"];                          // apple.testを読み込みたい
このコードで読み込めるのは、アプリで書き込んだファイルのみですね。
これでは読み込めません。
となると、付属できるファイルはpngの画像ファイルだけ…そんなことないですよね…

bonbo

Re: 読み込むファイルをiPhoneの中に書き込みたい

#13

投稿記事 by bonbo » 13年前

>softyaさん
ありがとうございます。
NSBundleだと実機に移したときに読み込めないみたいなのです…ありがとうございます。
>h2so5さん
ありがとうございます。
>iOSではアプリから書き込めるディレクトリが制限されています。
書き込みはできない。ということでしょうか…

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 読み込むファイルをiPhoneの中に書き込みたい

#14

投稿記事 by h2so5 » 13年前

書きこむディレクトリが制限されているとは言いましたが、読み込みが制限されているとは言っていません。

そもそも、読み込みができないならなぜこのトピックの投稿でNSLogによる結果が表示されているのでしょうか?
コードではfopenに失敗したらreturnするようになっているので、読み込みができないなら内容が表示されないはずです。

http://dixq.net/forum/viewtopic.php?f=3&t=12638
bonbo さんが書きました: NSLogで
0
1
2
3
4
5
6
7
8
9
と表示されると期待しているが
0
5
4
0
19
0
0
0
0
0
と表示されてしまう
というのが現状です。
bonbo さんが書きました:

コード:

int Load(){
    FILE *fp;
    NSString*path=[[NSBundle mainBundle]pathForResource:@"test2" ofType:@"test"];
    NSLog(@"path:%@",path);
    fp = fopen([path cStringUsingEncoding:1],"rb");
    if(fp==NULL){
        fclose( fp ) ;
        NSLog(@"failed1");
        return -1;
    }
    for(int i=0;i<10;i++)
        fread(&high[i], sizeof(int), 1, fp);
    fclose( fp ) ;
    NSLog(@"ここまできた");
    return 0;
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 読み込むファイルをiPhoneの中に書き込みたい

#15

投稿記事 by softya(ソフト屋) » 13年前

今までの話からNSSearchPathForDirectoriesInDomainsで得られるパスは読み書きできるはずです。
NSBundle の方は読み込みしか出来ないですが、NSSearchPathForDirectoriesInDomainsパスに内容をコピーすれば読み書き可能になりますよね。

>NSBundleだと実機に移したときに読み込めないみたいなのです…ありがとうございます。

それは、なぜそう思ったのですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

bonbo

Re: 読み込むファイルをiPhoneの中に書き込みたい

#16

投稿記事 by bonbo » 13年前

返信が遅れて申し訳ありません。
できました。
一応できたコードを貼っておきます。
http://www1.axfc.net/uploader/so/2820025
>h2so5さん
>書きこむディレクトリが制限されているとは言いましたが、読み込みが制限されているとは言っていません。
もう一度試してみたらできました。すみません…

>softyaさん
>それは、なぜそう思ったのですか?
勘違いでした…すみません…以前
http://www1.axfc.net/uploader/so/2817054
にアップロードしたソースコードでは動いていないと思うのですが、今回のでは動いています。

あと、うまく読み込めていなかった原因が分かりました。
読み込みもwindowsで作ったコードを流用していたのですが、

コード:

fread(&skip_Flag,sizeof(BOOL),1,fp);
これを

コード:

fread(&skip_Flag,sizeof(int),1,fp);
こう直したらうまくいくようになりました。(skip_Flagはwindows環境下のBOOL型で保存してあります。)
BOOLのサイズが環境によって違う?バグ…ではないですよね。
腑に落ちない部分もありますが、とりあえず読み込みに関しては解決しました。

何度もありがとうございました。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 読み込むファイルをiPhoneの中に書き込みたい

#17

投稿記事 by h2so5 » 13年前

bonbo さんが書きました: こう直したらうまくいくようになりました。(skip_Flagはwindows環境下のBOOL型で保存してあります。)
BOOLのサイズが環境によって違う?バグ…ではないですよね。
C言語にBOOL型はありません。
Winodws環境とiOS環境で、たまたま同じ名前でBOOLという型が定義されているだけです。

Windows環境では int, iOSでは signed char と等価です。

閉鎖

“C言語何でも質問掲示板” へ戻る