CFile写入文件换行的问题!!急!!

ssr123 2008-06-19 05:11:09
我用如下代码:
void CReadfDlg::OnButton6()
{
// TODO: Add your control notification handler code here
CString time_str;
CString line="\r\n";
CTime t;
t=CTime::GetCurrentTime();
CFile file;
file.Open("rtdata.txt",CFile::modeCreate|CFile::modeWrite);


time_str.Format("00000,%d-%d-%d %d:%d:%d,0007,1,0,0,",t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute(),t.GetSecond());

file.Write(time_str,strlen(time_str));
file.SeekToEnd();
file.Write(line,line.GetLength());

file.Close();
}
怎么执行几次后还是只有一行数据??
...全文
712 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ak0078 2008-09-15
  • 打赏
  • 举报
回复
file.Write(line,line.GetLength());
!!!!
stillvxx 2008-06-19
  • 打赏
  • 举报
回复
不好意思,半小时前打开这个帖子,然后忙去了 不知道lz已解决问题了
stillvxx 2008-06-19
  • 打赏
  • 举报
回复
这段代码有问题,
file.Write(time_str,strlen(time_str));
file.SeekToEnd();
file.Write(line,line.GetLength());
打开文件时,文件默认定位到文件的开头,这时写就将以前的内容覆盖了,且写文件时,文件的定位指针会自
动往下走的
改成下面这样试试
file.SeekToEnd();
file.Write(time_str,strlen(time_str));
file.Write(line,line.GetLength());
ssr123 2008-06-19
  • 打赏
  • 举报
回复
解决了!!新代码如下:
CString time_str;
CString line="\r\n";
CTime t;
t=CTime::GetCurrentTime();
CFile file;
//file.Open("rtdata.txt",CFile::modeCreate|CFile::modeWrite);
file.Open("rtdata.txt",CFile::modeCreate |CFile::modeWrite|CFile::modeNoTruncate);

file.SeekToEnd();
time_str.Format("00000,%d-%d-%d %d:%d:%d,0007,1,0,0,",t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMinute(),t.GetSecond());

file.Write(time_str,strlen(time_str));

file.Write(line,line.GetLength());


file.Close();
ssr123 2008-06-19
  • 打赏
  • 举报
回复
file.Open("rtdata.txt",CFile::modeCreate |CFile::modeWrite|CFile::modeNoTruncate);

执行几次后文件还是一行!!
Amuro1987218 2008-06-19
  • 打赏
  • 举报
回复
用写字版打开看应该是换行
Amuro1987218 2008-06-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ssr123 的回复:]
file.Write(line.GetBuffer(),line.GetLength());

Compiling...
readfDlg.cpp
D:\prog\vcex\readf\readfDlg.cpp(418) : error C2660: 'GetBuffer' : function does not take 0 parameters
Error executing cl.exe.

readf.exe - 1 error(s), 0 warning(s)

[/Quote]

不用改这处了,可能就是文件非追加方式打开的原因
ssr123 2008-06-19
  • 打赏
  • 举报
回复
file.Open("rtdata.txt",CFile::modeCreate ¦CFile::modeWrite¦CFile::modeNoTruncate);

运行后还是一行,并且行尾有个黑方块!!
Amuro1987218 2008-06-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ToperRay 的回复:]
file.Open("rtdata.txt",CFile::modeCreate ¦CFile::modeWrite ¦ CFile::modeNoTruncate);

[/Quote]
CFile::modeNoTruncate 创建文件时如文件已存在不对其进行截断
ssr123 2008-06-19
  • 打赏
  • 举报
回复
file.Write(line.GetBuffer(),line.GetLength());

Compiling...
readfDlg.cpp
D:\prog\vcex\readf\readfDlg.cpp(418) : error C2660: 'GetBuffer' : function does not take 0 parameters
Error executing cl.exe.

readf.exe - 1 error(s), 0 warning(s)
cwc270 2008-06-19
  • 打赏
  • 举报
回复
试试这样
file.Open("rtdata.txt",CFile::modeCreate ¦CFile::modeWrite¦CFile::modeNoTruncate);
ToperRay 2008-06-19
  • 打赏
  • 举报
回复
file.Open("rtdata.txt",CFile::modeCreate ¦CFile::modeWrite ¦ CFile::modeNoTruncate);
ToperRay 2008-06-19
  • 打赏
  • 举报
回复
少了个CFile::modeNoTruncate
Amuro1987218 2008-06-19
  • 打赏
  • 举报
回复
file.Write(line.GetBuffer(),line.GetLength());

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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