我讀從使用Visual C++的一些目錄中的文件。我如何檢查該文件是否存在。 如果我使用:檢查文件存在於C++的一些目錄
file.open("file.txt", ios::in);
其中file是fstream的成員。如果該文件不存在,這將創建一個文件。 如何檢查該文件是否存在? 謝謝
我讀從使用Visual C++的一些目錄中的文件。我如何檢查該文件是否存在。 如果我使用:檢查文件存在於C++的一些目錄
file.open("file.txt", ios::in);
其中file是fstream的成員。如果該文件不存在,這將創建一個文件。 如何檢查該文件是否存在? 謝謝
ifstream my_file("file.txt");
if (my_file.good())
{
// read away
}
如果不存在,這仍然是建立在目錄中的文件.. – digvijay 2012-01-31 11:49:40
你的代碼創建沒有文件,如果該文件已不存在(在大多數系統上,假設file
是std::ifstream
)。
由於文件系統訪問固有的併發性,沒有可靠的方法來檢查文件是否存在。最好的辦法是簡單地打開讀訪問和測試的文件是否成功:如果它缺少
if (file.good()) …
// or simply
if (file) …
但在此之前我使用好()我需要的唯一的事情使用open(),不是嗎?這將創建一個文件,如果不存在... – digvijay 2012-01-31 11:54:51
@digvijay不,它不會。 – 2012-01-31 12:02:53
一樣,只是調用文件不應該創建一個文件。它應該失敗,並且成功調用file.is_open()將返回false。
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
如果您在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
謝謝你ajit完美的作品 – digvijay 2012-01-31 12:41:38
你的代碼可以實現以下功能
ifstream file("text.text");
if(!file){
//handle error/throw exception here
}
你確定嗎? 'ios :: in'本身不應該創建文件。也許你將其他標誌傳遞給'open()'? – 2012-01-31 10:48:17
是否允許WINAPI?使用ifstream或類似方法不足以確定文件是否存在,因爲open()嘗試可能由於權限檢查而失敗。 – hmjd 2012-01-31 10:51:53
@hamidi - 我不知道有關的標誌,但IOS ::在是我使用 – digvijay 2012-01-31 11:29:19