大家好!我想向论坛的各位高手请教一下。我现在有一个程序可以从外部读取数据存成txt文档,按照时间存储,文件大小可以控制。如1.txt、2.txt我现在用的编程工具是MFC,要设计按一定顺序(也就是文件名上的时间)来逐个读取*.txt文件的内容,然后转发到电脑的串口。有一个就是文件数量是不断更新,我担心的问题是重复发送同一个文件,或者只发送当前文件夹下的文件,而遇到新生成的文件,程序却已经跑完了。下面贴一下我的代码,代码是线程里面发送数据的一段,大家看看,给些意见,希望各位帮个忙,谢谢各位!CFileFind finder;
CString strdel,strdir;strdir = strFolder+"\\*"; //要发送的文件目录BOOL b_found = finder.FindFile(strdir,0);while(b_found)
{
b_found = finder.FindNextFile();  
strdel = finder.GetFileName();  
//strdel = hWnd->m_strAutosendFilepath+ "\\" + strdel;
  strdel = strdir + "\\" + strdel;CFile datafile;
if(!datafile.Open(strdel,CFile::modeRead)) //文件打开错误w
{
continue;
}
//读文件内容
char buf[1024];
unsigned long len = datafile.GetLength();unsigned int nReaded = datafile.Read(buf,1024); //读1024字节while(nReaded == 1024) //未读完所有内容
{
hWnd->m_comPort.WriteData(buf,nReaded); //发送
nReaded = datafile.Read(buf,1024); //继续读
Sleep(2);
}hWnd->m_comPort.WriteData(buf,nReaded); //发送 datafile.Close();}

解决方案 »

  1.   


    谢谢您!您说的是比较深层次的了,我存数据的文件夹没有子目录,就只存储txt文件。我现在用CFileFind,之前没有用过,不知道b_Found这个状态指示之后,一旦此刻文件夹的文件传输完了,就退出循环,而我的另外一个线程会一直产生新的文件,所以就怕循环退出之后还有新的文件没发出来
      

  2.   

    举个例子,假设要发送数据的文件夹里面此刻有10个txt文件,如1.txt到10.txt,然后我再此刻开启了数据转发的线程,线程处理这些要转发的数据。
    但是此时,文件夹又会被新放入11.txt,12.txt 
    有可能转发数据的线程转发得比较快,那么数据传输完成之后,线程退出,新的数据又来了,这个时候该如何处理呢?
      

  3.   

    看来楼主对程序设计的敏感度还是有点儿低,文件不断更新的情况下,肯定是不能用循环来检测的,要不你CPU不得撑暴,要不就是你程序不能实时更新。
    如果敏感度高些,应该想到windows会提供了API,有文件更新时自动通知你的应用程序,见下面,这个API我没有用过,甚至都没了解过,但我知道应该有这么个API:
    http://hi.baidu.com/jiahaosoft/item/04d9ecaa354f29ff15329b11
      

  4.   

    再来个例子吧:
    http://www.cnblogs.com/doublesnke/archive/2011/08/16/2141374.html
      

  5.   


    好的 谢谢您!
    我感觉MFC的难度在于不了解很多有用的库函数
    多多学习了,谢谢!
      

  6.   


    谢谢你!我现在的做法就是读取文件名,文件名是用时间来标记的,就按照时间顺序,逐一查找和转发。记录文件夹文件信息和查找是一样的 所以我没有这么做。BeanJoy 写给我的方法,我也要试一试。他的方法从系统中直接读取文件夹内文件的改变,而不用一直循环查找文件,我觉得是一个好的方法。
      

  7.   


    关键是思想,不是非要了解所有API,但是必要的时候你要知道应该有合适的API有完成任务。