maeda
2014年6月10日 14時55分
SDカードのファイル名を大文字/小文字の区別なく参照したいのですが、どのようにすればよいでしょうか?
SDカード上の"File.csv"を読み出したいのですが、
以下のコードで"error: No such file or directory"となってしまいます。
mount("/dev/mmcblk0p1","/mnt","vfat",0,"uid=651,gid=651");
fd = open("/mnt/file.csv",O_RDONLY);
if(fd == -1){
perror("error");
}
コメント
y.nakamura
中村です。
> 誰も反応しないので口を出しますが、
誰か詳しい人が答えてくれるんじゃないかと見ていたのですが、
ないですねぇ~。
> 大文字/小文字の区別なく参照するマウントオプションがあるのはCDROMのほうでvfatは無理かもしれません。
> あり得るとしたら、8+3文字のMSDOSファイル名を使うモードでのアクセスかなぁ。
Armadilloに入っているmountでどこまで使えるのかわかりませんが、
Linuxカーネル2.6のドキュメントにこういうのがあります。
http://archive.linux.or.jp/JF/JFdocs/kernel-docs-2.6/filesystems/vfat.t…
--
なかむら
kasahara.adincs
アディンクス 笠原です
Armadilloでは使ったことないのですが
http://www.brain-dump.org/projects/ciopfs/
とかは使えないでしょうか
この機能を使ってマウントすれば区別なくアクセスできたはずです。
(昔Webでのファイル名問題(ABC.htmとabc.htm)で利用しました)
使えなかったらごめんなさい
> SDカードのファイル名を大文字/小文字の区別なく参照したいのですが、どのようにすればよいでしょうか?
>
> SDカード上の"File.csv"を読み出したいのですが、
> 以下のコードで"error: No such file or directory"となってしまいます。
>
> mount("/dev/mmcblk0p1","/mnt","vfat",0,"uid=651,gid=651");
> fd = open("/mnt/file.csv",O_RDONLY);
> if(fd == -1){
> perror("error");
> }
>
>
>
at_takenoshita
竹之下です。
glob(3)とstrcasecmp(3)を使う方法が、ファイルシステムに依存しなくて安全かなと思います。
#define _GNU_SOURCE // 引数を変更しないGNUバージョンのbasename(3)を使うために #include <string.h> #include <strings.h> #include <glob.h> glob_t g; unsigned int i glob("/mnt/*.csv", 0, NULL, &g); for (i = 0; i < g.gl_pathc; i++) { if (strcasecmp("file.csv", basename(g.gl_pathv[i])) == 0) { // file.csvかFile.csv } } globfree(&g);
という感じのコードで、file.csvでもFIle.csvでも処理できるようにならないでしょうか?
(動かしていないですが。。)
saitoh
2014年6月13日 11時42分
誰も反応しないので口を出しますが、
大文字/小文字の区別なく参照するマウントオプションがあるのはCDROMのほうでvfatは無理かもしれません。
あり得るとしたら、8+3文字のMSDOSファイル名を使うモードでのアクセスかなぁ。