lemon_cjp
驱动中牛
驱动中牛
  • 注册日期2002-05-16
  • 最后登录2005-02-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1803回复:10

读写操作中文件指针能行吗?

楼主#
更多 发布于:2002-07-14 19:20
我在usb的应用程序中,采用的是直接读写文本文件的数据,就是把
writefile和readfile中的LPVOID lpBuffer改为我自己定义的
FILE *fp,编译是通过了,可我对自己的这种用法却没有把握,请高手赐教,这样做能行吗?
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-14 22:40
try
lemon_cjp
驱动中牛
驱动中牛
  • 注册日期2002-05-16
  • 最后登录2005-02-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-14 23:52
我没有设备,你要是有设备能不能帮我试一试啊
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-15 09:48
在搞懂WDM基本原理后,一定要找实际的硬件来试试。要不然很多问题是不会碰到的。
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
lemon_cjp
驱动中牛
驱动中牛
  • 注册日期2002-05-16
  • 最后登录2005-02-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-15 21:24
是啊,我也挺想试一试的,可是原理图交上去后就杳无音信,等板子作出来又要几个月,我就只有纸上谈兵了
icnet
驱动牛犊
驱动牛犊
  • 注册日期2002-04-05
  • 最后登录2004-03-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-15 22:48
完全可以,我就是采用的这种方式进的文件传输
CFile m_file;
HANDLE m_Chand;//还需用m_Chand=CreateFile(FileName,
  GENERIC_WRITE|GENERIC_READ,
  0,
  NULL,
  OPEN_EXISTING,
  0,
  NULL);//先打开句柄

m_file.Read(buff,LONGER);

WriteFile(m_Chand,buff,LONGER,&rwet,NULL);

不过写时好像存在一个HEX与ASCII码的转换问题 :)
lemon_cjp
驱动中牛
驱动中牛
  • 注册日期2002-05-16
  • 最后登录2005-02-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-15 23:16
谢谢icnet的指点,不过我的意思是
HANDLE  hFile = open_file( \"PIPE04\" );
FILE *fid=fopen(\"Input.dat\",\"wb\");
BOOL bRet =ReadFile(hFile, fid + i, dwLength - i, &nBytes, NULL);
hFile是pipe的指针,fid为文件指针,这样行吗?
icnet
驱动牛犊
驱动牛犊
  • 注册日期2002-04-05
  • 最后登录2004-03-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-16 10:40
这个我倒没试过,
不过开辟一个buffer中转也特简单啊
读:
buffr=new byte[64];
bResult=ReadFile(m_Chand,buffr,8,&twet,NULL);
if(bResult==0)
{MessageBox(\"no data\");//
return;
}

r_file.Write(buffr,25);
free(buffr);

写:
m_file.Read(buff,LONGER);

m_Whand=WriteFile(m_Chand,buff,LONGER,&rwet,NULL);
if(m_Whand==0)
{
siz=GetLastError();
wsprintf(err,\"Write data error!!!number=%d\",siz);
AfxMessageBox(err);
CloseHandle(m_Chand);
m_file.Close();
return;
}

[编辑 -  7/16/02 by  icnet]
lemon_cjp
驱动中牛
驱动中牛
  • 注册日期2002-05-16
  • 最后登录2005-02-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-18 22:25
不好意思,前两天上不了网。说实话,你的用法我以前都没想过,不过我不明白为什么你每次都要用到m_file,不用能行吗?而且每次使用writefile和readfile都是只有8个字节,是不是读的只是地址啊?请指教!!
icnet
驱动牛犊
驱动牛犊
  • 注册日期2002-04-05
  • 最后登录2004-03-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-07-22 09:56
r_file是一个以读方式打开的文件,m_file是以写方式打开的一个文件句柄.
用前都CreateFile()打开。我只是想将m_file文件的内容写到USB,从USB读来的数据写到r_file文件。相当于实现文件指针的读写。
至于WriteFile人(m_Chand,buff,LONGER,&rwet,NULL),ReadFile(m_Chand,buffr,LONGER,&twet,NULL)所读的字节数,其实都是由参数LONGER决定。如果是bulk传输方式, fireware和开发的底层驱动可同时设定wMaxPacketSize最大为64

这里读的什么,要看fireware指定的数据单元。
lemon_cjp
驱动中牛
驱动中牛
  • 注册日期2002-05-16
  • 最后登录2005-02-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-07-22 20:26
谢谢指教,等我的板子做好了,就可以试一试了。我觉得你的办法不错,我想是不是buffer开的大一些,一次性的读或写文件,这样对设备读写时就直接对buffer操作,是不是会更快一些呢?
游客

返回顶部