2012-04-18 54 views
0

對於正常的文件路徑,我可以使用stat並獲取它的大小。當路徑包含非ASCII名稱如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 *。從命令提示符收到的路徑實際上並不是一個有效的文件。

enter image description here

+0

如果您能夠以其他方式打開文件,則始終可以在文件描述符上使用'fstat()'。 – FatalError 2012-04-18 17:29:08

+0

我的銘文終端,我的編輯都不允許我輸入這些字符。哈哈:) – 2012-04-18 17:35:15

+0

你確定你交出文件名正確編碼和逃脫?用「ls」C:\ temp \ s \ e \ app.log'「進行測試。 – j13r 2012-04-18 17:35:33

回答

2

假設你使用的是Windows,請嘗試使用GetShortPathNameW獲得短路徑名稱(如果存在的話),然後通過短信名stat()

+0

在我的WinNT 6.3上,如果路徑名不是8.3格式的太長,那麼短路徑名仍然會包含非ASCII字符。 – hypersw 2015-02-19 16:00:43

+0

哎。有趣。這僅適用於* some *的NTFS卷。雖然按預期爲其他人工作。那麼,無論如何,都不能被認爲是可靠的。 – hypersw 2015-02-19 16:06:47

相關問題