hur.cn - 华软网

 热门搜索

MFC输出txt问题

  作者:未知    来源:网络    更新时间:2011/3/31
我想把循环中的输出到txt依次执行,问题是如何执行下次循环时覆盖上次输出或者删除上次循环生成的txt文件,重新输出也可以,貌似第一种方法简单些:代码在下面,高手帮指点下!
int max_col = 16;
int max_row = m_ctrlTable.GetItemCount();
    char szPath[MAX_PATH] = {0};
    GetModuleFileName(NULL, szPath, MAX_PATH);
    (_tcsrchr(szPath, _T('\\')))[1] = 0;
CString filename = _T("para.txt");
try
{
CFile file(szPath+filename,  CFile::modeCreate|CFile::modeReadWrite|CFile::modeNoTruncate);
for(int row = 0; row < max_row; row++)
{
          //这里的循环体部分就不贴了,主要部分已经全贴出来了;
          SetCurrentDirectory(szPath);
          WinExec("cmd.exe /c Dat2Rin.exe @para.txt",SW_SHOWNORMAL);

}

file.Close();
}
catch(CFileException *e)
{
//Add debug infomation
e->Delete();
}
高手给点力啊!
---华软 网友回答---
  class="deleted_message"> 该回复于2011-03-31 14:15:41被版主删除
---华软网友回复---
里面有一个for循环体,就是利用这个循环,例如row=0时保存这行的输入到txt中然后用winexec命令行执行,当然for循环中的输出txt那部分我省略了,代码有些多。row=1时再执行上述过程。知道每行都被保存到txt并被执行!
---华软网友回复---
我的想法就是实现下次循环输出到txt的内容能把上次循环输出到txt的内容给覆盖掉,并且不影响winexec的执行!
---华软网友回复---
没有人回答么!?
---华软网友回复---
CFile::modeNoTruncate删了
---华软网友回复---
引用 4 楼 liuyong3272 的回复:
没有人回答么!?

已经删了,并且把CFile file(szPath+filename, CFile::modeCreate|CFile::modeReadWrite)
放到循环体中了,但是为何cmd.exe执行的只是最后一次循环保存的txt中的参数呢?
---华软网友回复---
引用 5 楼 wswhz1987 的回复:
CFile::modeNoTruncate删了

还是有一些问题,为何cmd.exe执行的只是最后一次循环保存的txt中的参数呢?是命令行有问题么?我的意思是依次把每一行中参数输出到txt分别用命令行执行!
---华软网友回复---
引用 6 楼 liuyong3272 的回复:
引用 4 楼 liuyong3272 的回复:
没有人回答么!?

已经删了,并且把CFile file(szPath+filename, CFile::modeCreate|CFile::modeReadWrite)
放到循环体中了,但是为何cmd.exe执行的只是最后一次循环保存的txt中的参数呢?


估计是执行太快  你没感觉出来而已  所以只看到最后一次执行的画面
---华软网友回复---
也有可能是频繁的调用WinExec("cmd.exe /c Dat2Rin.exe @para.txt",SW_SHOWNORMAL);

导致第二次调用时把第一次的关了  可以在for里sleep一下  看是否执行  等执行结束了再继续

循环
---华软网友回复---
CFile f;
for(int row = 0; row < max_row; row++)
{
  f.Open(szPath+filename,CFile::modeCreate|CFile::modeReadWrite);
  ...
  PROCESS_INFORMATION pi; 
  STARTUPINFO si = {sizeof(si)}; 
  BOOL ret = CreateProcess(NULL,"命令行",NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);
  if (ret)
  { 
    CloseHandle(pi.hThread); 
     WaitForSingleObject(pi.hProcess, INFINITE); 
    GetExitCodeProcess(pi.hProcess, &dwExitCode); 
    CloseHandle(pi.hProcess); 
  }
  f.Close();
}
---华软网友回复---
引用 7 楼 liuyong3272 的回复:
引用 5 楼 wswhz1987 的回复:
CFile::modeNoTruncate删了

还是有一些问题,为何cmd.exe执行的只是最后一次循环保存的txt中的参数呢?是命令行有问题么?我的意思是依次把每一行中参数输出到txt分别用命令行执行!


file.Close(); 加到循环里了么?先保存在调用,CMD怎么看缓冲区的东西。。。


---华软网友回复---
引用 10 楼 gordon3000 的回复:
CFile f;
for(int row = 0; row < max_row; row++)
{
  f.Open(szPath+filename,CFile::modeCreate|CFile::modeReadWrite);
  ...
  PROCESS_INFORMATION pi; 
  STARTUPINFO si = {sizeof(si)}; 
  BOOL ret……

我试了你的方法,但是用WaitForSingleObject的话,dos界面提示不能打开para.txt文件!请问是什么意思?
---华软网友回复---
结贴吧!其实我用sleep解决了问题!      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。