关于ofstream::write()的奇怪问题

时间:2021-04-18 20:17:36
m_ofstream.open(name,ios::out , 0) ; 
m_ofstream.write(p,nLen);
问题在于如果在write这句设置断点 或者说是单步执行这些操作的时候会提示invalid handle.
但是如果没有断点或是在非调试模式下面则文件写入正常

在网上找了一阵子 到是没发现这样的怪现像 有谁碰到过?指点一下

16 个解决方案

#1


list<int>::iterator temp;

for( iter = ilist.begin(); iter != ilist.end(); iter++ )
{
temp = iter++;
if( *iter % 2 != 0 )
{
ilist.erase( temp );
}
//cout<<" " <<*iter;

}
类似这样,但是这样会不去判第一个元素,你可以把第一个元素单独考虑

#2


m_ofstream.open(name,ios::out , 0) ;
将第三个参数 0 去掉看看

#3


晕了,是我理解错了,还是楼上的发错位置了?

#4


to  tuxw(醉书生) : 我曾去掉试过
一般情况下是第二次write的时候
功能是进行文件传输 打开文件后收到就写一下 我跟了好几次都是第二次写的时候出错了

first-chance exception in a.exe (ntdll.dll) :0xc00000008 :invalid handle

#5


帖错了,不好意思

#6


我试的怎么没问题(XP 、 VC6+SP6)

#include <iostream.h>
#include <fstream.h>

void main()
{
    ofstream fos;
    fos.open("txt.txt", ios::out, 0);
    //fos.open("txt.txt", ios::out);

    for(int i=0; i<5; ++i)
    {
        fos.write("abc", 3);
    }
    fos.close();

    ifstream fis;
    fis.open("txt.txt", ios::in);
    cout << fis.rdbuf() << endl;
    fis.close();
}

#7


用if(!m_ofstream)

看文件是否打开成功

#8


对了,这个帖应该移到 C++ 去

#9


你设成追加模式呢?
fos.open("txt.txt", ios::out | ios::app);

#10


如果加判断
if(fos)
   fos.write(..);//第一次执行即出错了

我觉得太奇怪了 如果说是代码有问题吧 为什么在非调试下面又是正常的咧?
在收到传输文件请求的时候按文件名open,然后收到之后write,收到结束串时close

再一次检查了代码 好像没啥问题啊 
代码比较长 不方便贴出来

#11


真是奇怪透顶了...有没有谁碰到过这种情况了

#12


应该是中断不允许在那之中吧。。我没遇到过。。

#13


程序是多线程 不过我在调试的时候都只开了一个客户端

这会儿多数调试的时候在if(fos)处都非法了

#14


vc6的话,调试程序是会出问题的

#15


to yjh1982(血精灵) why

#16


我哪知道,反正我也碰到过就是了.

尤其是调试多线程和dll的时候.

#1


list<int>::iterator temp;

for( iter = ilist.begin(); iter != ilist.end(); iter++ )
{
temp = iter++;
if( *iter % 2 != 0 )
{
ilist.erase( temp );
}
//cout<<" " <<*iter;

}
类似这样,但是这样会不去判第一个元素,你可以把第一个元素单独考虑

#2


m_ofstream.open(name,ios::out , 0) ;
将第三个参数 0 去掉看看

#3


晕了,是我理解错了,还是楼上的发错位置了?

#4


to  tuxw(醉书生) : 我曾去掉试过
一般情况下是第二次write的时候
功能是进行文件传输 打开文件后收到就写一下 我跟了好几次都是第二次写的时候出错了

first-chance exception in a.exe (ntdll.dll) :0xc00000008 :invalid handle

#5


帖错了,不好意思

#6


我试的怎么没问题(XP 、 VC6+SP6)

#include <iostream.h>
#include <fstream.h>

void main()
{
    ofstream fos;
    fos.open("txt.txt", ios::out, 0);
    //fos.open("txt.txt", ios::out);

    for(int i=0; i<5; ++i)
    {
        fos.write("abc", 3);
    }
    fos.close();

    ifstream fis;
    fis.open("txt.txt", ios::in);
    cout << fis.rdbuf() << endl;
    fis.close();
}

#7


用if(!m_ofstream)

看文件是否打开成功

#8


对了,这个帖应该移到 C++ 去

#9


你设成追加模式呢?
fos.open("txt.txt", ios::out | ios::app);

#10


如果加判断
if(fos)
   fos.write(..);//第一次执行即出错了

我觉得太奇怪了 如果说是代码有问题吧 为什么在非调试下面又是正常的咧?
在收到传输文件请求的时候按文件名open,然后收到之后write,收到结束串时close

再一次检查了代码 好像没啥问题啊 
代码比较长 不方便贴出来

#11


真是奇怪透顶了...有没有谁碰到过这种情况了

#12


应该是中断不允许在那之中吧。。我没遇到过。。

#13


程序是多线程 不过我在调试的时候都只开了一个客户端

这会儿多数调试的时候在if(fos)处都非法了

#14


vc6的话,调试程序是会出问题的

#15


to yjh1982(血精灵) why

#16


我哪知道,反正我也碰到过就是了.

尤其是调试多线程和dll的时候.