Armadilloフォーラム

大文字/小文字の区別なくSDカードを参照する方法について

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");
}

コメント

誰も反応しないので口を出しますが、
大文字/小文字の区別なく参照するマウントオプションがあるのはCDROMのほうでvfatは無理かもしれません。
あり得るとしたら、8+3文字のMSDOSファイル名を使うモードでのアクセスかなぁ。

中村です。

> 誰も反応しないので口を出しますが、

誰か詳しい人が答えてくれるんじゃないかと見ていたのですが、
ないですねぇ~。

> 大文字/小文字の区別なく参照するマウントオプションがあるのは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

2014年6月13日 13時53分

 アディンクス 笠原です
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");
> }
>
>
>

竹之下です。

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でも処理できるようにならないでしょうか?
(動かしていないですが。。)