2012-01-31 44 views
2

我讀從使用Visual C++的一些目錄中的文件。我如何檢查該文件是否存在。 如果我使用:檢查文件存在於C++的一些目錄

file.open("file.txt", ios::in); 

其中file是fstream的成員。如果該文件不存在,這將創建一個文件。 如何檢查該文件是否存在? 謝謝

+1

你確定嗎? 'ios :: in'本身不應該創建文件。也許你將其他標誌傳遞給'open()'? – 2012-01-31 10:48:17

+0

是否允許WINAPI?使用ifstream或類似方法不足以確定文件是否存在,因爲open()嘗試可能由於權限檢查而失敗。 – hmjd 2012-01-31 10:51:53

+0

@hamidi - 我不知道有關的標誌,但IOS ::在是我使用 – digvijay 2012-01-31 11:29:19

回答

2
ifstream my_file("file.txt"); 
if (my_file.good()) 
{ 
    // read away 
} 
+0

如果不存在,這仍然是建立在目錄中的文件.. – digvijay 2012-01-31 11:49:40

4

你的代碼創建沒有文件,如果該文件已不存在(在大多數系統上,假設filestd::ifstream)。

由於文件系統訪問固有的併發性,沒有可靠的方法來檢查文件是否存在。最好的辦法是簡單地打開讀訪問和測試的文件是否成功:如果它缺少

if (file.good()) … 
// or simply 
if (file) … 
+0

但在此之前我使用好()我需要的唯一的事情使用open(),不是嗎?這將創建一個文件,如果不存在... – digvijay 2012-01-31 11:54:51

+0

@digvijay不,它不會。 – 2012-01-31 12:02:53

0

一樣,只是調用文件不應該創建一個文件。它應該失敗,並且成功調用file.is_open()將返回false。

+0

SampleDialog :: fileHandler.open( 「file.txt的」,IOS ::中);如果(SampleDialog :: fileHandler.is_open()){MessageBox的( 「文件打開」,NULL,MB_OK); 這是我正在使用的代碼。如果不存在open()被稱爲文件的時刻,則會被創建。然後is_open()總是計算爲true。 – digvijay 2012-01-31 11:42:36

1

如果您在Windows上工作時,您可以使用Windows API來爲你做的工作。以下是您的簡短代碼片段...您必須傳遞file.txt的完整路徑才能成功。例如, d:\ MyFolder文件\ file.txt的。

WIN32_FIND_DATA FindFileData; 
HANDLE hFind = INVALID_HANDLE_VALUE; 

hFind = FindFirstFile("D:\MyFolder\file.txt", &FindFileData); 
GetLastError(); 

    if (hFind == INVALID_HANDLE_VALUE) 
      // File not found 
+0

謝謝你ajit完美的作品 – digvijay 2012-01-31 12:41:38

0

你的代碼可以實現以下功能

ifstream file("text.text"); 

if(!file){ 
//handle error/throw exception here 
} 
相關問題