我读从使用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