yue110
2016年9月30日 18時23分
御世話になっております。
御質問させていただきます。
現在、SDカードにファイルを作成して各種データを保存しています。
ファイル名を任意に設定できるようにしてあり、全角文字も設定できるようにしています。
そこで、0x5Cや0x7Cが入ると、正常にファイルを作成する事が出来なくなってしまい、
エラーとなってしまいます。
円マーク(0x5C)を一つ追加するなども試してみましたが、どうもうまくいきません。
なにか良い手はないでしょうか?
よろしくお願い致します。
コメント
at_yashi
k.sato
回答ありがとうございます。
> VFATの場合は、code page を選択しないとダメだったりしますか?
Armadilloでマウント時にオプションでfmaskしか指定せず、下記のようになっていました。
/dev/mmcblk0p1 on /home/ftp/pub type vfat (rw,fmask=0111,dmask=0002,allow_utime=0020,codepage=cp437,iocharset=iso8859-1)
このとき添付したFilesystem.jpgの値が設定されるのでしょうか?
> ATDEで同じ SDを mount した場合は、どうなりました?
すみません。ATDE上でSDをどうやってmountするのかわかりません。
教えて頂けませんか?
ファイル | ファイルの説明 |
---|---|
Filesystems.jpg | カーネル_DOS/FAT/NT Filesystems_画面キャプチャ |
y.nakamura
中村です。
linux-2.6.26-atXX/fs/vfat/namei.c
に次のようなコードがあります。
/* Characters that are undesirable in an MS-DOS file name */ static inline wchar_t vfat_bad_char(wchar_t w) { return (w < 0x0020) || (w == '*') || (w == '?') || (w == '<') || (w == '>') || (w == '|') || (w == '"') || (w == ':') || (w == '/') || (w == '\\'); }
ファイルやディレクトリのcreateやrenameなどで
使われるみたいです。
--
なかむら
k.sato
佐藤です。
中村様ありがとうございます。
> linux-2.6.26-atXX/fs/vfat/namei.c
> に次のようなコードがあります。
>
>
> /* Characters that are undesirable in an MS-DOS file name */ > static inline wchar_t vfat_bad_char(wchar_t w) > { > return (w < 0x0020) > || (w == '*') || (w == '?') || (w == '<') || (w == '>') > || (w == '|') || (w == '"') || (w == ':') || (w == '/') > || (w == '\\'); > } >
シフトJISの全角で0x5Cと0x7Cが含まれるときは
t vfat_bad_char()を呼ばないよう変更してみました。
無事、全角の0x5Cと0x7Cを含むファイル名でファイル作成することができました。
ありがとうございました。
k.sato
2016年10月3日 13時14分
yue110と共同で作業しております佐藤です。
詳しく説明しますと、
シフトJISで入力された文字列を使用してファイル名を作成し、
SDカードに保存するときの問題です。
SDカードはvfatでフォーマットされており、
0x5Cが含まれるものはfopenの段階でエラーとなります。
同じファイル名でも
ext3でフォーマットしたSDカードには保存できているのですが関係あるのでしょうか?
またvfatのSDカードに0x5C、0x7Cが含まれる2バイト文字をファイル名にするのは
不可能なのでしょうか?
以上、よろしくお願い致します。