我这里有个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写过去结果就是一篇空白
本人实在不太明白 特请教一下大伙
其中一个响应部分如下(这里响应的的是在指定的监控目录下新建了文件或文件夹)
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写过去结果就是一篇空白
本人实在不太明白 特请教一下大伙
file.Write("\r\n",2);
你把第二句去掉看下,而且你确定你现在的文件时打开状态么
{
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();
}
file.open(path,CFile::modeReadWrite|CFile::modeCreate);==
第一个参数需要完整的路径
char* ch = "hello";
if(f.Open("1.txt", CFile::modeCreate | CFile::modeWrite|CFile::typeBinary))
{
f.Write(ch,strlen(ch));
}
f.Close();
试试把CString context="File Added: " + strFileName;改成
CString context=_T("File Added: ") + strFileName;看看
回复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真纠结
要不各位大大我我把程序发出来看看?
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下 得到确认
不知道有哪位大大对这方面了解