WriteFile("\r\n")无法换行

myeclispe 2008-10-28 02:16:44
写进去之后没有任何效果.请教各位帮忙分析以下.
...全文
1041 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
专属酱油~~ 2012-02-24
  • 打赏
  • 举报
回复
学习了
arthurlee 2008-10-28
  • 打赏
  • 举报
回复
为什么不写成这样呢:

TCHAR acTime[200];
memset(acTime,0,sizeof(acTime));
_tsprintf(acTime, TEXT("%02d:%02d\r\n"), Hour, Sec);


这样的话,如果以MBCS来编译,文件就可以直接看到内容;
如果以UNICODE编译,文件需要用notepad以unicode格式打开。
一般的,unicode的文本文件会在前面加0xFF, 0xFE两个字节作为文件头。
myeclispe 2008-10-28
  • 打赏
  • 举报
回复
刚在网上找到wsprintf与sprintf区别,结贴了.
一条晚起的虫 2008-10-28
  • 打赏
  • 举报
回复

WriteFile(handle,acTime,_tcslen(acTime) * 2,&dwWritten,NULL); //unicode工程
一条晚起的虫 2008-10-28
  • 打赏
  • 举报
回复
L"%02d:%02d\r\n" // (2+2) + (2) + (2+2) + (2+2) = 14 //unicode每个字符2字节。
myeclispe 2008-10-28
  • 打赏
  • 举报
回复
再问,

wsprintf(acTime, L"test%02d:%02d\r\n", Hour, Sec);
WriteFile(handle,acTime,10,NULL,NULL); //这句导致内存错误
//-->
DWORD dwWritten;
WriteFile(handle,acTime,14,&dwWritten,NULL); //现在应该多长?

实际打印出来的是08:22加上换行符,6个字节就够了呀!
myeclispe 2008-10-28
  • 打赏
  • 举报
回复
Dear All,

//这个地方是拷贝的,少拷了d
wsprintf(acTime, L"%02d:%02\r\n", Hour, Sec);
//-->
wsprintf(acTime, L"%02d:%02d\r\n", Hour, Sec); //漏了一个‘d’

WriteFile(handle,acTime,10,NULL,NULL); //这句导致内存错误
//-->
DWORD dwWritten;
WriteFile(handle,acTime,14,&dwWritten,NULL); //请问这里的14是怎么算出来的? 我这样算4+1+4+1=10;
lygfqy 2008-10-28
  • 打赏
  • 举报
回复
一:unicode的文本文件都是要在文件头处加东西的
二:如果怀疑是否写入\r\n可以直接用二进制查看文档
一条晚起的虫 2008-10-28
  • 打赏
  • 举报
回复
长度好像也不是10...
一条晚起的虫 2008-10-28
  • 打赏
  • 举报
回复
//lz这段程序,在Vs2008和VC6下根本就非法操作。
wsprintf(acTime, L"%02d:%02\r\n", Hour, Sec);
//-->
wsprintf(acTime, L"%02d:%02d\r\n", Hour, Sec); //漏了一个‘d’

WriteFile(handle,acTime,10,NULL,NULL); //这句导致内存错误
//-->
DWORD dwWritten;
WriteFile(handle,acTime,10,&dwWritten,NULL);
Yao-debo 2008-10-28
  • 打赏
  • 举报
回复
我把楼主的代码放VC2005里,改了改:
SYSTEMTIME sysTime;
GetSystemTime(&sysTime);
INT Sec = sysTime.wSecond;
INT Hour=sysTime.wHour;
WCHAR acTime[200] = {0};
memset(acTime,0,sizeof(acTime));
wsprintfW(acTime, L"%02d:%02d\r\n", Hour, Sec); // 是不有笔误? 按照你的代码,长度为12,按照我的就是14
HANDLE handle=CreateFile(TEXT("C:\\alarm_log.txt"),
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);

if(handle!= INVALID_HANDLE_VALUE)
{
SetFilePointer(handle, 0, NULL, FILE_END);
DWORD dwWritten;
WriteFile(handle,acTime, 14,&dwWritten,NULL); // 长度为10吗?
TRACE("%d\n", dwWritten);
}
else
::MessageBox(NULL,TEXT("create file error"),TEXT("error"),MB_OK);

文件必须用UNICODE打开,才能看到换行符号.
myeclispe 2008-10-28
  • 打赏
  • 举报
回复
代码如下:


SYSTEMTIME sysTime;
GetSystemTime(&sysTime);
INT Sec = sysTime.wSecond;
INT Hour=sysTime.wHour;
TCHAR acTime[200];
memset(acTime,0,sizeof(acTime));
wsprintf(acTime, L"%02d:%02\r\n", Hour, Sec); //换行符在这里
HANDLE handle=CreateFile(TEXT("C:\\windows\\alarm_log.txt"),
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);

if(handle!= INVALID_HANDLE_VALUE)
{SetFilePointer(handle, 0, NULL, FILE_END);
WriteFile(handle,acTime,10,NULL,NULL); //即使下面加上WriteFile(handle,_TEXT("\r\n"),10,NULL,NULL)也不行。
}
else
MessageBox(NULL,TEXT("create file error"),TEXT("error"),MB_OK);

zaodt 2008-10-28
  • 打赏
  • 举报
回复
把前后文带上,描述详细一些。
jingtan 2008-10-28
  • 打赏
  • 举报
回复
检查一下函数返回值, 执行成功了吗

16,472

社区成员

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

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

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