ofstream 如何判断文件被创建了

我看你有戏 2013-11-14 02:45:42


ofstream outfile("c:\\11\\22\\33\33\\data.txt",ios::app|ios::binary);
if (!outfile) //!运算符重载
{
return 0;
}
const char* p_str = "this is test";
int aa=0x1234;
outfile.write((char*)&aa,sizeof(aa));

aa=0x5678;
outfile.write((char*)&aa,sizeof(aa));
outfile.close();




文件在第一次被创建的时候,需要写入一些初始数据
需要如何判断

...全文
200 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dyw 2013-11-14
  • 打赏
  • 举报
回复
如果可以用boost,不妨试试boost::log,支持宽字节,多线程(有例子)。
ken_scott 2013-11-14
  • 打赏
  • 举报
回复
如果不考虑8L的情形 如果是我的话,我可能会定义一个叫init()的函数,来优化

bool init()
{
    static bool has_init = false;

    if (has_init)
    {
        return(true);
    }

    if (!has-init-data-in-file)
    {
        add-init-data-in-file;
    }

    has_init = true;

    return(true);
}
如果考虑多线程的问题,可能还需要让它在main之前执行,(放到一个全局对象、单例的构造中)
ken_scott 2013-11-14
  • 打赏
  • 举报
回复
引用 9 楼 mujiok2003 的回复:
不要使用文件流来做这种事情,请使用OS API,比如stat,或者第三方lib, 比如boost::filesytem
+1 我的话也会选择用stat 另外,8L说的问题,也是一定要考虑的
ken_scott 2013-11-14
  • 打赏
  • 举报
回复
if (!outfile)
这个好像是不靠谱的 我现在都用
if (!outfile.is_open())
代替
mujiok2003 2013-11-14
  • 打赏
  • 举报
回复
不要使用文件流来做这种事情,请使用OS API,比如stat,或者第三方lib, 比如boost::filesytem
dyw 2013-11-14
  • 打赏
  • 举报
回复
引用 7 楼 henry3695 的回复:
[quote=引用 5 楼 dyw 的回复:] [quote=引用 3 楼 henry3695 的回复:] [quote=引用 2 楼 dyw 的回复:] 判断一下文件是否存在: file.good()
哥,我写的是一个函数,需要调用n次的,我是想知道文件第一次被创建的时候,往里面写数据 不是每次创建都写,good(),每次调用都是true ,每次都写了[/quote] 我的意思是good()返回false说明文件不存在,这时可以写入。[/quote] 那每次写文件之前都需要判断吗,我这个是写日志的函数,所以想简化下 调用的次数会比较多[/quote] 这个是自然的了。Log文件有可能被手工删除。
我看你有戏 2013-11-14
  • 打赏
  • 举报
回复
引用 5 楼 dyw 的回复:
[quote=引用 3 楼 henry3695 的回复:] [quote=引用 2 楼 dyw 的回复:] 判断一下文件是否存在: file.good()
哥,我写的是一个函数,需要调用n次的,我是想知道文件第一次被创建的时候,往里面写数据 不是每次创建都写,good(),每次调用都是true ,每次都写了[/quote] 我的意思是good()返回false说明文件不存在,这时可以写入。[/quote] 那每次写文件之前都需要判断吗,我这个是写日志的函数,所以想简化下 调用的次数会比较多
NorZ 2013-11-14
  • 打赏
  • 举报
回复
用ifstream判断文件是否存在 ifstream fin("hello.txt"); if (!fin) { std::cout << "can not open this file" << endl; }
dyw 2013-11-14
  • 打赏
  • 举报
回复
引用 3 楼 henry3695 的回复:
[quote=引用 2 楼 dyw 的回复:] 判断一下文件是否存在: file.good()
哥,我写的是一个函数,需要调用n次的,我是想知道文件第一次被创建的时候,往里面写数据 不是每次创建都写,good(),每次调用都是true ,每次都写了[/quote] 我的意思是good()返回false说明文件不存在,这时可以写入。
我看你有戏 2013-11-14
  • 打赏
  • 举报
回复
outfile.seekp(0,ios_base::end); // 移动到文件尾 int tmp = outfile.tellp(); if (tmp==0) { outfile.write(g_css,strlen(g_css)+1); } 我现在是文件打开后,判断下长度,为0的话说明文件第一次创建,我写入初始数据 还有没有好点的办法
我看你有戏 2013-11-14
  • 打赏
  • 举报
回复
引用 2 楼 dyw 的回复:
判断一下文件是否存在: file.good()
哥,我写的是一个函数,需要调用n次的,我是想知道文件第一次被创建的时候,往里面写数据 不是每次创建都写,good(),每次调用都是true ,每次都写了
dyw 2013-11-14
  • 打赏
  • 举报
回复
判断一下文件是否存在: file.good()

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧