有没有比简单地尝试打开文件更好的方法?
int exists(const char *fname)
{
FILE *file;
if ((file = fopen(fname, "r")))
{
fclose(file);
return 1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我想打开一个文件进行阅读.但是,在这个程序的上下文中,如果文件不存在就可以了,我继续.我希望能够识别错误何时"未找到文件"以及何时出现错误.否则意味着我需要退出并出错.
我没有看到一个明显的方法来做到这一点fstream.
我可以用C open()和perror().我推测有一种fstream方法可以做到这一点.
我正在使用C++ 在Qt应用程序中实现文件保存功能.
我正在寻找一种方法来检查所选文件是否已经存在,然后写入它,以便我可以向用户提示警告.
我正在使用std::ofstream,我不是在寻找Boost解决方案.
我想将一些内容输入到文件中,但我想首先检查是否存在名称我想创建的文件.如果是这样,即使文件为空,我也不想创建任何文件.
我的尝试
bool CreateFile(char name[], char content[]){
std::ofstream file(name);
if(file){
std::cout << "This account already exists" << std::endl;
return false;
}
file << content;
file.close();
return true;
}
Run Code Online (Sandbox Code Playgroud)
有什么办法可以做我想要的吗?
我想确定 C++ 11 中是否存在文件
我有以下代码:
ifstream inputFile(c);
if (!inputFile.good()) {
std::cout << "No file found" << '\n';
}
Run Code Online (Sandbox Code Playgroud)
和
if (inputFile.peek() == std::ifstream::traits_type::eof()){
....
}
Run Code Online (Sandbox Code Playgroud)
哪一个是正确且惯用的?
遍历使用通配符模式查找文件的目录时,我们遇到了意外的性能问题.
我们有180个文件夹,每个包含10,000个文件.命令行搜索dir <pattern> /s几乎立即完成(<0.25秒).但是,从我们的应用程序,相同的搜索需要3-4秒.
我们最初尝试使用System.IO.DirectoryInfo.GetFiles()与SearchOption.AllDirectories现在已经尝试了Win32 API调用FindFirstFile()和FindNextFile().
使用我们的代码进行分析表明绝大部分执行时间都花费在这些调用上.
我们的代码基于以下博文:
我们发现这很慢,所以更新了GetFiles函数以采用string搜索模式而不是谓词.
任何人都可以对我们的方法可能出现的问题有所了解吗?
fstream datoteka;
datoteka.open("Informacije.txt", fstream::in | fstream::out | fstream::app);
if(!datoteka.is_open()){
ifstream datoteka("Informacije.txt")
datoteka.open("my_file.txt", fstream::in | fstream::out | fstream::app);
}/*I'm writing IN the file outside of that if statement.
Run Code Online (Sandbox Code Playgroud)
所以它应该做的是创建一个文件,如果它之前没有创建,如果它被创建写入该文件.
你好,所以我想从我的程序中检查文件是否已经存在,如果它已经存在则打开程序并且我可以在其中写入,如果文件未打开(之前没有创建)程序创建它.所以问题是当我创建一个.csv文件,并完成写入,我想检查写入是否真的存在,该文件无法打开.在.txt文件中,一切都是空白的.
我正在使用fstream库来处理文件.基本上,我需要知道某个文件是否存在.在线c ++文档中,关于open(),它的内容如下:
回报价值
没有
如果函数无法打开文件,则为流设置failbit状态标志(如果使用成员例外注册了该状态标志,则可能会抛出ios_base :: failure).
它表示没有指定返回值.但是如果失败,则设置标志.我的问题是,我应该然后访问那个标志,或者更好地问一下,我该怎么看才能open()成功.
到目前为止我有这个代码:
int Log::add()
{
fstream fileStream;
fileStream.open("logs.txt");
}
Run Code Online (Sandbox Code Playgroud) 我有一些在循环中运行并写入文件的基本代码.它看起来像是:
std::ofstream myFile;
myFile.open("file.txt", std::ofstream::out);
while (true)
{
if (myFile.is_open() && myFile.good())
{
myFile << "test" <<std::endl;
}
if (myFile.fail())
{
std::cout << "Error\n";
}
}
Run Code Online (Sandbox Code Playgroud)
如果我手动插入myFile.setstate()并将其设置为失败,一切正常并且出错.
但是,如果我让程序在循环中写入文件然后我手动继续删除文件...程序似乎继续写入文件,就像它仍然存在一样.不会抛出任何错误.我想也许使用flush()会工作,因为我期望它设置failbit,但行为似乎没有改变.我究竟做错了什么?
有没有办法检查文件是否突然丢失,而不是试图再次尝试调用open()?(我试图在循环中避免使用.open()和.close().而是在开始时打开,然后在超出范围时将其关闭.)
我想检查文件是否存在并尝试使用以下函数
#include <fstream>
bool DoesFileExist(const std::string& filename) {
std::ifstream ifile(filename.c_str());
return (bool)ifile;
}
Run Code Online (Sandbox Code Playgroud)
但是,它似乎没有正常工作,因为而不是检查存在是否创建了文件!这有什么问题?
请注意,我被迫使用C++ 98标准,不能使用#include <sys/stat.h>或#include <unistd.h>在此处接受的答案中建议.