相关疑难解决方法(0)

检查C中是否存在文件的最佳方法是什么?

有没有比简单地尝试打开文件更好的方法?

int exists(const char *fname)
{
    FILE *file;
    if ((file = fopen(fname, "r")))
    {
        fclose(file);
        return 1;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c filesystems cross-platform

401
推荐指数
8
解决办法
50万
查看次数

std :: ofstream,在写入之前检查文件是否存在

我正在使用C++ 在Qt应用程序中实现文件保存功能.

我正在寻找一种方法来检查所选文件是否已经存在,然后写入它,以便我可以向用户提示警告.

我正在使用std::ofstream,我不是在寻找Boost解决方案.

c++ fstream std stream ofstream

34
推荐指数
5
解决办法
7万
查看次数

当参数是目录时,ifstream open()不设置错误位

在C++程序中,使用std :: ifstream,我试图打开用户指定的文件 - 到目前为止一直很好.但是,我不小心输入了一个实际上是目录的文件名,我很惊讶地发现尝试打开()该目录没有产生任何错误.

这是一个最小的例子:

std::ifstream f;
f.open("..");
if(!f.is_open() || !f.good() || f.bad() || f.fail()) {
    std::cout << "error bit set on open" << std::endl;
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

这里没有错误的迹象.如果我继续尝试getline(),getline()会设置一个错误位.

std::string str;
getline(f, str);

if(f.eof()) std::cout << "getline set eofbit" << std::endl;
else if(f.bad()) std::cout << "getline set badbit" << std::endl;
else if(f.fail()) std::cout << "getline set failbit" << std::endl;
Run Code Online (Sandbox Code Playgroud)

这输出"getline set badbit",这是合理的.使用>>运算符会抛出一个下溢异常,这也没关系.

现在,我的问题是,我怎么能检测到用户输入了目录名而不是正确的文件名?有没有办法做到这一点?从流中获取和取消输入字节似乎很乏味且容易出错.

另外,为什么会这样呢?我意识到从程序的角度来看,它只是相同的数据,但我认为操作系统也会发送一些"嘿,这是一个目录"的消息.

c++ ifstream

9
推荐指数
1
解决办法
2504
查看次数

如何检查C++中的文件是否存在于Windows程序中?

这适用于仅限Windows的程序,因此可移植代码不是问题.

我只需要:

bool DoesFileExist( LPWSTR lpszFilename )
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

c c++ windows filesystems winapi

2
推荐指数
4
解决办法
1490
查看次数

标签 统计

c++ ×3

c ×2

filesystems ×2

cross-platform ×1

fstream ×1

ifstream ×1

ofstream ×1

std ×1

stream ×1

winapi ×1

windows ×1