C++中ofstream不会创建文件

3
我试图将数组的每个元素输出到一个 .txt 文件中,但出于某种原因,它甚至不会创建该文件。我在我的显示方法中有一个 cmd 输出和文件输出,这个方法从主函数中调用。cmd 输出完美地工作,但是当我使用 ofstream 尝试创建文件并将数组元素输出到其中时,我看不到任何文本文件被创建。
ofstream ofs("TEST.txt");

if(!ofs)
    cout << "cannot use" << endl;
else
{
    for(int a=0; a < 12; a++)
    {
        for(int b=0; b < 12; b++)
        {

            cout << RandomArray[a][b] << "\t";
            ofs << RandomArray[a][b];
        }

        cout << "\n";
    }

}

ofs.close();

2
你是否看到了“无法使用”的文本,还是根本没有看到这个文件?你是在什么时候和哪里检查这个文件的? - Kiril Kirov
你是否在与你的程序/可执行文件相同的目录中查找该文件? - drahnr
Kiril Kirov 它根本没有被创建。我去开始按钮,然后在那里搜索“程序和文件”。在Java中,这就是我找到由我的程序创建的文件的方法。qdii,谢谢,我会编辑的。 - BubbleTree
@qdii:即使流已经成功打开,调用close()也是不必要的,因为~basic_filebuf()会自动调用close() - Jon Purdy
我不确定它是否有帮助,但我建议在创建的文件中至少写入一个换行符。我知道在UNIX上这并不重要,但我总是对Windows上的任何非常规操作持怀疑态度(尽管这不是基于事实而是无知)。以上程序看起来没问题(假设这是完整的main(),包括必需的#include <fstream>#include <iostream>using namespace std;)。唯一不寻常的地方是缺少换行符。 - Dietmar Kühl
显示剩余2条评论
2个回答

7

尝试这个

#include <iostream>
#include <fstream>

#ifdef _WIN32
#include <windows.h>
#define SYSERROR()  GetLastError()
#else
#include <errno.h>
#define SYSERROR()  errno
#endif

int main(int argc, char** argv)
{
    std::ofstream of("TEXT.TXT");
    if(of.is_open())
    {
        of<<"Some text here"<<std::endl;
        of.flush();
        of.close();
        std::cout<<"wrote the file successfully!"<<std::endl;
    }
    else
    {
        std::cerr<<"Failed to open file : "<<SYSERROR()<<std::endl;
        return -1;
    }
    return 0;
}

由于我手边没有Windows电脑,因此未测试win32 GetLastError() #define。但errno位是有效的。如果文件打开失败,这将至少告诉您错误的原因。


是的...我没有Windows访问权限,所以没有在Windows上测试过...但是GetLastError()应该可以显示Windows上的错误...只是提醒一下:D - mohaps
是的,GetLastError() 在 Windows 上是有效的。使用 Windows 10 SDK 版本 10.0.20348.0 进行了测试。 - gigabot

4

您的程序没有问题,只要可以创建ofstream即可正常工作。我认为您没有在正确的目录中查找。


1
你知道吗,你是正确的!我刚刚在整个电脑上进行了搜索,它出现了。太傻了...对不起,谢谢! - BubbleTree

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接