キーボードのユニットにUSB接続端子が1つある。
普通はアダプタを使い本体にUSBデバイスを接続する。
制約はストレージの場合、FAT32でフォーマットされていること。FAT32でないと認識されない。
ところが TF300TのキーボードユニットのUSB接続はNTFSでフォーマットされていてもアクセス可能。
発生した問題はストレージ内のアイテム数の上限の違いから起きたこと。
症状と経過:
アプリ実行時に突然サムネイル画像が表示されずにエラーメッセージ警告。
エラー警告はUSB接続の外部ストレージのみ。
例外処理でファイル入出力、及び、ファイル作成で弾いたところ。
それにandroid OS 付属ファイルマネージャーで外部ストレージのディレクトリの移動もできない。
原因を考えたが分からない。
ディレクトリ内の1番から24番目まではサムネイル画像ファイルは作成される。
25番はエラー。他のディレクトリのサムネイル画像ファイルは作成されずエラー表示。
24番と25番の違いを解明しようと、24番のサムネイル画像ファイルを削除。
アプリを実行すると24番は作成するが25番はエラー。
手詰まりでディレクトリ内のサムネイル画像ファイル24枚を削除。
たまたま、他のディレクトリへ移動したら24枚のサムネイル画像ファイル作成後にエラーストップ。
2時間ほど悩んで原因候補に当たる。
数百枚のサムネイル画像ファイルを削除した後にファイルマネージャーのディレクトリの移動を実行したら問題なく移動できた。
FAT32だと2TBまでしかフォーマットできない。NTFSはそれ以上のストレージをフォーマットできる。
接続していたHDD容量は3TB。
ストレージ内の取り扱えるアイテム数はFAT32よりもNTFSの方が遥かに多い。
知らず知らずにFAT32で取り扱える上限を超えていたのだろう。
デバイスが外付けストレージのフォーマットをFAT32に制限しているので、android OSで取り扱えるアイテム数の上限をFAT32に合わせていると推測できる。
対応は、本体内の画像と同じのキャッシュディレクトリにサムネイル画像ファイルを保存する。
外部ストレージはディレクトリの移動を考えてサムネイル画像ファイル用ディレクトリを元の画像ファイルと同じ場所に作っていた。
かなり特殊な状況だが問題が起こる事、予防方法が取れない事でシステムがキャッシュファイルを場合により削除してくれる事に逃げる。