2012-04-18 10 views
0

通常のファイルパスでは、statを使用してサイズを取得できます。パスにC:\ temp \ sमानकe \ app.logのようなASCII以外の名前が含まれていると、動作しません。非アスキー文字でファイルを統計する方法

int main(int argc, char * argv[]) 
{ 
     struct stat FileAttrib; 

     if (stat(argv[1], &FileAttrib) < 0) { 
      printf("File Error Message = %s\n", strerror(errno)); 
     } 
     else 
     { 
      printf("File size %d\n", FileAttrib.st_size); 
     } 
     return 0; 
} 

statはchar *のみをとります。コマンドプロンプトから受け取ったパスは、実際には有効なファイルではありません。 Windowsを使用していると仮定すると、

enter image description here

+0

ファイルを開くことができれば、ファイル記述子に 'fstat()'をいつでも使用できます。 – FatalError

+0

私の名前の端末で、私の編集者は私にそのような文字を入力させてもいません。 haha :) –

+0

ファイル名を正しくエンコードしてエスケープしてください。 "ls 'C:\ temp \ sमानकe \ app.log'でテストしてください。 – j13r

答えて

2

、(存在する場合)、短いパス名を取得するためにGetShortPathNameWを使用してみてください、その後、stat()に短い名前を渡します。

+0

私のWinNT 6.3では、短いパス名は、8.3形式で長すぎない場合でも、非ASCII文字を含みます。 – hypersw

+0

よろしくお願いします。面白い。これはNTFSボリュームの* some *にのみ当てはまります。他の人にとっては期待通りの作品です。とにかく信頼できるとは思えません。 – hypersw

関連する問題