急,急,急!求教

sweetcjy 2001-07-25 07:48:37
我对一个文件进行分析用了一个类(别人的),他的接口不是内存指针,而是文件名或文件指针,现在我想用他的类做分析,但是现在是数据已经在内存中,怎么办?
不要MFC的,要API的,能不能帮我贴出代码?非常急!
一定给分!
...全文
175 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
sweetcjy 2001-07-26
  • 打赏
  • 举报
回复
我试了一下
就是文件大小不对
我这里所要用的文件是结构化的,而且是大小不能变
我的指针Pic_pos检查过是正确的,但是我查看了temp,多了几个字节,而且在文件开始
的那几个字节就多了几个!!!!!!!!!!!!!
不解啊!
sweetcjy 2001-07-26
  • 打赏
  • 举报
回复
我说到做到!
给分没商量!
sweetcjy 2001-07-26
  • 打赏
  • 举报
回复
谢谢azuo_lee
终于能行了!虽然程序还有错,但是写内存到文件部分这个障碍是过去了!
不过可以明确告诉大家,在我这里用fwrite就是错的
我用的windows profession2000的VC6,不过我的VC有问题,会自动删我编译的文件!会不会是系统文件出错?我的window profession 2000也常死机!
azuo_lee 2001-07-26
  • 打赏
  • 举报
回复
我看直接用Windows Api好像不行,因为你的parse是要stream型的文件指针?
不过开始的写文件还是可以用api来完成的:
HANDLE hFile = CreateFile("temp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE) {...//error }
DWORD dwNumberOfBytesWritten
if(!WriteFile(hFile, Pic_pos, Length, &dwNumberOfBytesWritten, NULL) || dwNumberOfBytesWritten!=Length) {...//write error }
CloseHandle(hFile);
然后再用fopen打开试试。
azuo_lee 2001-07-26
  • 打赏
  • 举报
回复
if((fp=fopen("temp","w+b"))==NULL) //显式指定"b" mode
{
...//error
}
fseek(fp, 0, SEEK_SET); //移动文件指针
fwrite(Pic_pos, 1, Length, fp); //写Length个字节。我不知道你用sizeof(short)是什么意思?
fflush(fp);
fseek(fp, 0, SEEK_SET);
parse(fp);
fclose(fp); //别忘了关闭文件
Cline 2001-07-26
  • 打赏
  • 举报
回复
那你就模仿MFC的CFile好了,我看了下,它主要用的就是::CreateFile,::WriteFile...
SuperChen 2001-07-26
  • 打赏
  • 举报
回复
你的 fwrite 中 Length 和 sizeof(short) 的順序寫反了, azuo_lee 的是對的.
也就是應該
fwrite(Pic_pos, sizeof(short), Length, fp);
SuperChen 2001-07-26
  • 打赏
  • 举报
回复
你的 fwrite 中 Length 和 sizeof(short) 的順序寫反了, azuo_lee 的是對的.
也就是應該
fwrite(Pic_pos, sizeof(short), Length, fp);
SuperChen 2001-07-26
  • 打赏
  • 举报
回复
你的 fwrite 中 Length 和 sizeof(short) 的順序寫反了, azuo_lee 的是對的.
也就是應該
fwrite(Pic_pos, sizeof(short), Length, fp);
sweetcjy 2001-07-26
  • 打赏
  • 举报
回复
的确是的!我也很奇怪!我的文件是好几个图片拷贝在一起
我的Pic_pos实际上是一个.png图片,我现在要把它写到一个新的文件里,我读出了这段内存,得到了长度Length,然后用fwrite()写到新的文件里,我检查fwrite()返回值也是正确的,可是我退出程序,查看文件实际大小,就是多了几个字节
我如果用CFile就正确!但是现在不能用MFC!
我这两天用I/O stream很不爽!老是有错!
azuo_lee 2001-07-26
  • 打赏
  • 举报
回复
1。Pic_pos到底是指向什么的指针,是否确实指向了你要写的数据区开头?它是指向字节的,还是指向什么其他结构的?
2。你的文件是结构化的,是什么意思?是不是文件以纪录(结构)的形式保存?那么每个结构的大小是多少(注意字节对齐)?有多少个纪录?是否等长?Length又指什么?
3。“多了几个字节,而且在文件开始”,这又是什么意思?
你提供的信息不够。我就不信,用fwrite(Pic_pos, 1, Length, fp)写的文件,大小会不是Length?
sweetcjy 2001-07-26
  • 打赏
  • 举报
回复
为什么还没有人回答!
我真的很急!
保证给分啊!
azuo_lee 2001-07-26
  • 打赏
  • 举报
回复
if((fp=fopen("temp","w+"))==NULL)
{
...//error
}
fwrite(Pic_pos, 1, Length, fp);
fflush(fp);
fseek(fp, 0, SEEK_SET);
parse(fp);
sweetcjy 2001-07-25
  • 打赏
  • 举报
回复
我想问的是如何用API写入文件
我的代码如下:
if((fp=fopen("temp","r+"))==NULL)
{
CreateFile("temp",GENERIC_READ|GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_RANDOM_ACCESS,NULL);
fp=fopen("temp","r+");
}
fflush(fp);
fwrite(Pic_pos,Length,sizeof(short),fp);//发现写不对,文件大小不对,不是Length
fclose(fp);
fp=fopen("temp","r+");
...//以下是分析函数
parse(fp);
大家继续努力,我可就靠你们了!
azuo_lee 2001-07-25
  • 打赏
  • 举报
回复
把内存中的数据分开后写回临时文件,再用他的类处理,不行?
sweetcjy 2001-07-25
  • 打赏
  • 举报
回复
是这样的,有一个文件,它是几个文件的组合,譬如把1.txt中的内容是2.txt+3.txt,我现在把1文件读出来,然后分离出2.txt,3.txt对2,3进行分析,所以我说是在内存中进行
Cline 2001-07-25
  • 打赏
  • 举报
回复
有些艺术品,比如一个瓶中放只船,瓶口比船小得多,不知是如何放进去的,不解呀!

听课.

16,548

社区成员

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

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

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