2012-01-31 48 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 
} 
相关问题