如何将CONTEXT结构体写入文本文件?为什么我一点东西都写不进去写不进去写不进去写不进去写不进去写不进去写不进去写不进去写不进去写不进去写不进去写不进去?

garfieldking 2010-08-19 03:47:35
事情的发生是这样子的:我想要在TXT文件中写入当前进程的CONTEXT信息(暂不考虑二进制转换成ASCII码的问题),哪知编译运行过后,生成的TXT文档中空空如也什么也没有。调试中观察CONTEXT中的内容正常。

基本的代码如下:

PROCESS_INFORMATION pi;
CONTEXT context;

CreateProcess(......, &pi);
context.ContextFlags = CONTEXT_CONTROL;
GetThreadContext(pi.hThread, &context);

HANDLE hFile = CreateFile("LOG.txt", GENERIC_WRITE, ......);
WriteFile(hFile, &context, sizeof(context), ......);


我也试过将CONTEXT memcpy到buffer中,再将buffer写入txt,结果仍是空空如也。

求指点。

PS1.怎样能较好地实现二进制到ASCII码的转换?
PS2.3435913836到底是什么意思?
...全文
284 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
garfieldking 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jim_king_2000 的回复:]

C/C++ code
HANDLE hFile = CreateFile("D:\LOG.txt", GENERIC_WRITE, ......);

楼主写绝对路径试试看。
[/Quote]
这个应该没有影响吧。hFile。
garfieldking 2010-08-20
  • 打赏
  • 举报
回复
解决了。很奇怪,CreateFile参数改成GENERIC_READ|GENERIC_WRITE就写入成功了。

明明我只需要往txt里写东西,根本没有读文件的步骤啊。。。。。。
赵4老师 2010-08-20
  • 打赏
  • 举报
回复
楼主试过改用下面代码了吗?
FILE *f=fopen("D:\\LOG.bin","wb");
fwrite(&context,sizeof(context),1,f);
fclose(f);
如果还是不行,会不会context的内容无权访问或者一执行上面代码context的内容就改变了呢?
先把context的内容memcpy一份,然后fwrite拷贝的那份再试试。
Jim_King_2000 2010-08-20
  • 打赏
  • 举报
回复
hFile没有影响。但文件就变成了D:\LOG.txt。LZ试试看,看看D:\LOG.txt是不是空的。
xixiaoliu 2010-08-20
  • 打赏
  • 举报
回复
你把CreateFile 到 WriteFile 到 CloseHandle 这部分的完整代码贴上来看看?特别是前两个函数的准确参数
Jim_King_2000 2010-08-19
  • 打赏
  • 举报
回复
HANDLE hFile = CreateFile("D:\LOG.txt", GENERIC_WRITE, ......);

楼主写绝对路径试试看。
garfieldking 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xixiaoliu 的回复:]

lz莫不是用记事本看这个文件的吧?
请用ReadFile读回去,在调试环境下看内容是否就是当初写出去的
[/Quote]
文件大小为0kb,里头什么也没有。
xixiaoliu 2010-08-19
  • 打赏
  • 举报
回复
lz莫不是用记事本看这个文件的吧?
请用ReadFile读回去,在调试环境下看内容是否就是当初写出去的
Jim_King_2000 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 garfieldking 的回复:]

引用 7 楼 zhao4zhong1 的回复:

可能是忘了CloseHandle(hFile);
或者干脆
FILE *f=fopen("LOG.bin","wb");
fwrite(&context,sizeof(context),1,f);
fclose(f);

handle也close了
filebuffer也flush了
楼猪郁闷了
[/Quote]
那应该没有大问题,把字符串写下去就好了。
garfieldking 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhao4zhong1 的回复:]

可能是忘了CloseHandle(hFile);
或者干脆
FILE *f=fopen("LOG.bin","wb");
fwrite(&context,sizeof(context),1,f);
fclose(f);
[/Quote]
handle也close了
filebuffer也flush了
楼猪郁闷了
赵4老师 2010-08-19
  • 打赏
  • 举报
回复
可能是忘了CloseHandle(hFile);
或者干脆
FILE *f=fopen("LOG.bin","wb");
fwrite(&context,sizeof(context),1,f);
fclose(f);

garfieldking 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jim_king_2000 的回复:]

引用 4 楼 garfieldking 的回复:

引用 3 楼 jim_king_2000 的回复:

用sprintf把每个成员转换成文本再写文件。

能用API还是用API吧。关键是,这里用WriteFile有什么问题呢?

那就用wsprintf。
检查WriteFile的返回值来确定函数正确执行与否。
[/Quote]
嗯,wsprintf,可以试试。

WriteFile返回值非零,没问题。
Jim_King_2000 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 garfieldking 的回复:]

引用 3 楼 jim_king_2000 的回复:

用sprintf把每个成员转换成文本再写文件。

能用API还是用API吧。关键是,这里用WriteFile有什么问题呢?
[/Quote]
那就用wsprintf。
检查WriteFile的返回值来确定函数正确执行与否。
garfieldking 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jim_king_2000 的回复:]

用sprintf把每个成员转换成文本再写文件。
[/Quote]
能用API还是用API吧。关键是,这里用WriteFile有什么问题呢?
Jim_King_2000 2010-08-19
  • 打赏
  • 举报
回复
用sprintf把每个成员转换成文本再写文件。
garfieldking 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 freshui 的回复:]

文件创建成功了吗? 目录允许读写吗?
[/Quote]
文件创建成功。目录允许读写。
freshui 2010-08-19
  • 打赏
  • 举报
回复
文件创建成功了吗? 目录允许读写吗?

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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