我这里有个MFC程序时监控文件目录修改的记录的
其中一个响应部分如下(这里响应的的是在指定的监控目录下新建了文件或文件夹)
CFile file("123.txt",CFile::modeReadWrite|CFile::modeCreate);

void On_FileAdded(const CString & strFileName)
{ m_listBox.AddString( _T("File Added: ") + strFileName);
         file.SeekToEnd();
file.Write("\r\n",2);
CString context="File Added: " + strFileName;
file.Write (context,context.GetLength ());
}
其中第一行是把XX(文件夹或文件)被创建的信息输出到界面上的文本域控件中 程序执行的时候成功显示
但是我想把这部分内容输出到文本文档中所以我弄了个123.txt写过去结果就是一篇空白
本人实在不太明白 特请教一下大伙

解决方案 »

  1.   

    你这个123.txt不是预先创建好的吧
      

  2.   

    file.SeekToEnd();
    file.Write("\r\n",2);
    你把第二句去掉看下,而且你确定你现在的文件时打开状态么
      

  3.   

    try
    {
    CFile file;
    file.Open(_T("F:\\11.txt"), CFile::modeReadWrite);
    char buf[] = "\r\nHello,World";
    file.SeekToEnd();
    file.Write(buf, strlen(buf));
    file.Close();
    }
    catch (CFileException* e)
    {
    e->ReportError();
    e->Delete();
    }
      

  4.   

    CFile file;
    file.open(path,CFile::modeReadWrite|CFile::modeCreate);==
    第一个参数需要完整的路径
      

  5.   

    你的文件对象都没有Open,当然存不到啦
      

  6.   

    CFile f;
    char* ch = "hello";
    if(f.Open("1.txt", CFile::modeCreate | CFile::modeWrite|CFile::typeBinary))
    {
    f.Write(ch,strlen(ch));
    }
    f.Close();
      

  7.   

    从楼主贴的代码看不出问题,我在VC6.0里面试了没有问题的,楼主是什么编译器?
    试试把CString context="File Added: " + strFileName;改成
    CString context=_T("File Added: ") + strFileName;看看
      

  8.   

    感谢各位的回复 不过目前还是没能成功
    回复1L 123.txt的确是事先建立的
    回复2L 不太确定 但是没有做其他事情 只开了这个程序 第二句去掉了没有效果
    回复3L 我把这段代码(其他几位的类似)放在界面框架中执行OK写进去了但是在这里又不行
    回复4L 第一个参数填了"C:\\123.txt"(预先创建)完整路径还是不行
    回复5L 创建变量的时候 CFile file("123.txt",CFile::modeReadWrite|CFile::modeCreate);额不知道这样算不算open了?我刚刚把这拆开了
    CFile file;

    file.Open("123.txt",CFile::modeReadWrite|CFile::modeCreate);  还是没有写
    回复6L 复制过去试了还是不行
    综上所述一下 写入文本这段代码放在界面框架中是可以的 这里是一个函数的内部它把一个控件当做参数传过去了所以函数内部可以说是与界面分离但是可以知道的是既然输出了就说明这里肯定被调用了想不通的就是txt在这里死活写不进去
    回复7L 的确 加了_T 不行 我用了VS2003和VC MFC写起来一样的 VC6.0也试了不行——1真纠结 
    要不各位大大我我把程序发出来看看?
      

  9.   

    刚才试了下把两种情况组合起来输出成功 这让我想起来了一个问题 编译的时候会出一个错误说是文件流类重定义了在xxx.obj(就是当前文档对应的)中 网上一种说法是在工程属性链接器里头添加命令行/force就可以通过 但是刚才的错误就变为警告说是(类似下面这段话)
    MTViewView.obj : warning LNK4006: "class CStdioFile outfile" (?outfile@@3VCStdioFile@@A) 已在 _MyDirWatcherDlg.obj 中定义;已忽略第二个定义
    NewWatchDlg.obj : warning LNK4006: "class CStdioFile outfile" (?outfile@@3VCStdioFile@@A) 已在 _MyDirWatcherDlg.obj 中定义;已忽略第二个定义
    ThreadView.obj : warning LNK4006: "class CStdioFile outfile" (?outfile@@3VCStdioFile@@A) 已在 _MyDirWatcherDlg.obj 中定义;已忽略第二个定义
    Debug/MTView.exe : warning LNK4088: 因 /FORCE 选项生成了映像;映像可能不能运行 
    给我的感觉是编译器优化导致的一种错误据此 我尝试的结果是 
    1只在界面中使用3L仁兄的代码成功 
    2只在函数被调用的这里使用3L的代码 失败
    3两边都同时使用(即两处都用此代码) 都成功 
    为了确认我还改了下 界面代码处(随便放到一个按钮的响应函数里)输出hello world1 本函数这里输出hello world2  
    于是在情况3下 得到确认
    不知道有哪位大大对这方面了解