阅读:1805回复:10
读写操作中文件指针能行吗?
我在usb的应用程序中,采用的是直接读写文本文件的数据,就是把
writefile和readfile中的LPVOID lpBuffer改为我自己定义的 FILE *fp,编译是通过了,可我对自己的这种用法却没有把握,请高手赐教,这样做能行吗? |
|
沙发#
发布于:2002-07-22 20:26
谢谢指教,等我的板子做好了,就可以试一试了。我觉得你的办法不错,我想是不是buffer开的大一些,一次性的读或写文件,这样对设备读写时就直接对buffer操作,是不是会更快一些呢?
|
|
板凳#
发布于: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指定的数据单元。 |
|
地板#
发布于:2002-07-18 22:25
不好意思,前两天上不了网。说实话,你的用法我以前都没想过,不过我不明白为什么你每次都要用到m_file,不用能行吗?而且每次使用writefile和readfile都是只有8个字节,是不是读的只是地址啊?请指教!!
|
|
地下室#
发布于: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] |
|
5楼#
发布于: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为文件指针,这样行吗? |
|
6楼#
发布于: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码的转换问题 :) |
|
7楼#
发布于:2002-07-15 21:24
是啊,我也挺想试一试的,可是原理图交上去后就杳无音信,等板子作出来又要几个月,我就只有纸上谈兵了
|
|
8楼#
发布于:2002-07-15 09:48
在搞懂WDM基本原理后,一定要找实际的硬件来试试。要不然很多问题是不会碰到的。
|
|
|
9楼#
发布于:2002-07-14 23:52
我没有设备,你要是有设备能不能帮我试一试啊
|
|
10楼#
发布于:2002-07-14 22:40
try
|
|