2011-01-26 40 views
2

我試圖找到的文件類型的路徑是路徑。我有這對於Linux ::查找類型,使用的Windows API

pathType CFilesystem::findPathType(const string& path) const 
    { 
     struct stat info; 
     int status = stat(path.c_str(), &info); 

     if(status == -1) 
     { 
      switch(errno) 
      { 
       case ENOENT: // A component of the path does not exist. 
        return pathType::none; 

       default: 
        return pathType::unknown; 
      } 
     } 

     if(S_ISDIR(info.st_mode)) 
     { 
      return pathType::directory; 
     } 

     if(S_ISREG(info.st_mode)) 
     { 
      return pathType::file; 
     } 

     return pathType::unknown; 
    } 

但我不知道如何做相同的Windows。 _stat似乎不工作(它說文件不存在,甚至不知道我敢肯定它的存在。畢竟,編程是從它運行。

+0

選擇不破。 (http://pragprog.com/the-pragmatic-programmer/extracts/tips) – xtofl 2011-01-26 12:46:12

回答

4

在Windows中,我認爲功能你正在尋找對於是GetFileAttributesEx

您也可以在Windows上使用的常規_statfunction也不過。你包括sys/types.hsys/stat.h

+0

而不是`_stat`我認爲你應該使用`_wstat64`爲Unicode文件名支持和64位的時間和大小。 – Philipp 2011-01-26 15:30:50

+0

謝謝!也會檢查_wstat64。 – Jookia 2011-01-26 23:17:36

3

_stat應該工作得很好。我會嘗試找出路的功能正在嘗試解決,printf的調試器和調試器,明智的。現在一定是顯而易見的。(在printf d的結果ebugging可以附加到你的問題,旁邊有一個目錄樹證明文件有:))

+0

呀,通過調試運行它第二次發現我的問題。這是因爲我在移植引擎時忘了實現另一個功能。愚蠢的我。 – Jookia 2011-01-27 03:01:52

3

這已經solved for you

pathType CFilesystem::findPathType(string const &path) const { 
    using namespace boost::filesystem; 
    boost::filesystem::path p (path); 
    switch (status(p)) { 
    case directory_file: return pathType::directory; 
    case file_not_found: return pathType::none; 
    case regular_file: return pathType::file; 
    default:    return pathType::unknown; 
    } 
}