我在操作CString 对象的时候,出现故障;每次程序运行的时候,都会弹出提示对话框,不胜其烦啊。具体情况如下:
CStdioFile filer(file1, CFile::Read); //filer是CStdioFile 对象操作file1,负责读取file1
CStdioFile filew(file2, CFile::Write);//filew是CStdioFile 对象操作file2,负责写入file2
CString str;
//先进行定位
filer.SeekTOBegin();
filew.SeekToEnd();//抽出file1中指定位置的数据写入file2中
for(int line=1; line=10; line++)
{
fier.ReadString(str);
CString test=str.Mid(10,6)+'\n';
//MessageBox(test);用于跟踪显示写入file2的数据
filew.WriteString(test);
}当程序运行到line=3的时候跳出,且有提示对话框。当使用MessageBox(test);来跟踪的时候,显示为空(当然line==1或2的时候有内容:string)。我的问题是怎样处理这个异常(即:当line==3的时候,用程序处理这个异常,消除对话框的弹出,然后当line>3的时候,程序继续运行,不需要人为干涉)?我看了一下MFC的CString::Mid() 操作,有什么:throw( CMemoryException );兄弟我没有干过这个活,不知道怎样处理,在此有请各位兄弟携手相助。注:不要告诉我在for循环中加入if(line==3)continue;我所处理的对象是不允许这么做的。下面是file1的内容:
0123456789string //file1的第一行,line1
0123456789string //file1的第二行,line2
//file1的第三行,line2
0123456789string //file1的第四行,line2
0123456789string
0123456789string
0123456789string
012
0123456789string
0123456789string
CStdioFile filer(file1, CFile::Read); //filer是CStdioFile 对象操作file1,负责读取file1
CStdioFile filew(file2, CFile::Write);//filew是CStdioFile 对象操作file2,负责写入file2
CString str;
//先进行定位
filer.SeekTOBegin();
filew.SeekToEnd();//抽出file1中指定位置的数据写入file2中
for(int line=1; line=10; line++)
{
fier.ReadString(str);
CString test=str.Mid(10,6)+'\n';
//MessageBox(test);用于跟踪显示写入file2的数据
filew.WriteString(test);
}当程序运行到line=3的时候跳出,且有提示对话框。当使用MessageBox(test);来跟踪的时候,显示为空(当然line==1或2的时候有内容:string)。我的问题是怎样处理这个异常(即:当line==3的时候,用程序处理这个异常,消除对话框的弹出,然后当line>3的时候,程序继续运行,不需要人为干涉)?我看了一下MFC的CString::Mid() 操作,有什么:throw( CMemoryException );兄弟我没有干过这个活,不知道怎样处理,在此有请各位兄弟携手相助。注:不要告诉我在for循环中加入if(line==3)continue;我所处理的对象是不允许这么做的。下面是file1的内容:
0123456789string //file1的第一行,line1
0123456789string //file1的第二行,line2
//file1的第三行,line2
0123456789string //file1的第四行,line2
0123456789string
0123456789string
0123456789string
012
0123456789string
0123456789string
CString test=str.Mid(10,6)+'\n'; }catch(...){}catch(...)是捕获所有异常
到底是怎么个处理方法,写出来啊,兄弟对这个不懂啊!!!在catch{ }中到底是什么代码啊,写出来!!!
CString file1 = "joe1.txt" ;
CString file2 = "joe2.txt" ;
CStdioFile filer(file1, CFile::modeRead); //filer是CStdioFile 对象操作file1,负责读取file1
CStdioFile filew(file2, CFile::modeWrite|CFile::modeCreate);//filew是CStdioFile 对象操作file2,负责写入file2
CString str;
//先进行定位
filer.SeekToBegin();
filew.SeekToEnd(); //抽出file1中指定位置的数据写入file2中
for(int line=1; line<=10; line++)
{
filer.ReadString(str);
//AfxMessageBox(str) ;
CString test=str.Mid(10,6)+'\n';
//MessageBox(test);用于跟踪显示写入file2的数据
filew.WriteString(test);
}楼主,你用这个程序试一下。
在CString::Mid函数的使用中,是不会因为空字符串而出现断言错误的。
但
1、你的CStdioFile的构造函数的第二个参数使用的不正确。
2、for循环中的第一个ReadString的变量名,你写的不对
3、SeekToBegin的函数名你也写错了。
这三个地方你修改一下,再调试一下你的程序。
你可以新建一个Dialog程序,加入一个按钮,再把上面我给你的代码粘进去。然后编译一下。再在*.sln所在的目录中生成一个joe1.txt文件。
文件的内容为如下所示:
0123456789string
0123456789string
0123456789string
0123456789string
0123456789string
0123456789string
012
0123456789string
0123456789string
CString file2 = "joe2.txt" ;
CStdioFile filer(file1, CFile::modeRead); //filer是CStdioFile 对象操作file1,负责读取file1
CStdioFile filew(file2, CFile::modeWrite|CFile::modeCreate);//filew是CStdioFile 对象操作file2,负责写入file2
CString str;
//先进行定位
filer.SeekToBegin();
filew.SeekToEnd(); //抽出file1中指定位置的数据写入file2中
for(int line=1; line<=10; line++)
{
filer.ReadString(str);
//AfxMessageBox(str) ;
CString test=str.Mid(10,6)+'\n';
//MessageBox(test);用于跟踪显示写入file2的数据
filew.WriteString(test);
}
程序代码,好像没有粘上,我再粘一下试试
LZ应该是在行为空的时候或者行不够长的时候将空串写到指定的文件,这样才符合
抽出file1中指定位置的数据写入file2中
异常操作无法完成。filer(file1, CFile::Read);
应该是CFile::modeRead吧 for(int line=1; line <= 10; line++)
{
filer.ReadString(str);
if(str.GetLength() <= 10)
{
filew.WriteString("\n");
}
else
{
filew.WriteString(str.Mid(10,6)+"\n");
}
}
filer.Close();
filew.Close();
CStdioFile filer(file1,CFile::modeRead);
CStdioFile filew(file2,CFile::modeWrite);
CString str; //先进行定位
filer.SeekToBegin();
filew.SeekToEnd(); //抽出file1中指定位置的数据写入file2中
for(int line=1; line=10; line++)
{
fier.ReadString(str);
CString test=str.Mid(10,6)+'\n';
//MessageBox(test);用于跟踪显示写入file2的数据
filew.WriteString(test);
} 当程序运行到line=3的时候跳出,且有提示对话框。当使用MessageBox(test);来跟踪的时候,显示为空(当然line==1或2的时候有内容:string)。 我的问题是怎样处理这个异常(即:当line==3的时候,用程序处理这个异常,消除对话框的弹出,然后当line> 3的时候,程序继续运行,不需要人为干涉)?我看了一下MFC的CString::Mid() 操作,有什么:throw( CMemoryException );兄弟我没有干过这个活,不知道怎样处理,在此有请各位兄弟携手相助。注:不要告诉我在for循环中加入if(line==3)continue;我所处理的对象是不允许这么做的。
下面是file1的内容:
0123456789string //file1的第一行,line1
0123456789string //file1的第二行,line2
//file1的第三行,line3
0123456789string //file1的第四行,line4
0123456789string
0123456789string
0123456789string
012 //file1的第八行,line8
0123456789string
0123456789string
第一,如果可以,你最好是提供你所使用的源代码
第二,你所谓的有“提示框”,应该不是断言,因为Mid函数不会因为是空行,而产生断言,上面给你发的程序如果你调试一下,就会验证这个结论。
{
CFileFind finder; //define CFileFind object
char* pFileNamew="writeto.txt"; //define 写入数据的文件名
CString str; //define 行字符串 char* dir="F:\\data\\"; //路径define dir,所处理文件都放在这里
BOOL bWorking = finder.FindFile("F:\\data\\*.*");
while(bWorking)
{
bWorking= finder.FindNextFile( );
// MessageBox(finder.GetFileName());// filename test
CString fPath=dir+_T(finder.GetFileName()); //absolute path
TRY
{
CStdioFile filer(fPath,CFile::modeReadWrite);
CStdioFile filew(pFileNamew,CFile::modeWrite);
filer.SeekToBegin();
filew.SeekToEnd();
/////////////////////////////////////////////////////////////////////
CString caption; //
caption=finder.GetFileName(); //
SetWindowText(caption); //display name on caption//
/////////////////////////////////////////////////////////////////////
for(int line=1; line<=3; line++)
{
filer.ReadString(str);
if(line==1||line==2)
continue;
if(line==3)
{//将flag作为判断依据,以便决定转入哪一支路
CString flag=str.Mid(10, 4);
///////////////////////////////////////////////////////////////////////////////////////
if(flag==_T("DS05"))//支路之一
{ //从新对文件定位,只取其中某些行
filer.SeekToBegin();
for(int i=1; i<=20; i++)
{
if(i==1||i==2||i==3||i==4||i==5||i==6)
if(i==8||i==9||i==10||i==11||i==12 )
if(i==14||i==15)
if(i==18||i==19||i==20)
continue;
filer.ReadString(str);
//////////////////////////////////////////////////////////////////////////////////////
if(i==7) //
{ //
if(str.Mid(6, 4)==_T("GOOD")) //
break; //jump out loop //
else //
{ //
CString errorcode=str.Mid(27,4); //
filew.WriteString(filer.GetFileName().Left(8));//
filew.WriteString(errorcode); //
filew.WriteString(_T("DS05..")); // } //
} //
//////////////////////////////////////////////////////////////////////////////////////
if(i==13)
{
CString ver=str.Mid(15, 7);
if(ver.GetLength()<=2)//GPAS03VF
filew.WriteString(_T("#######"));
else
{
if(ver.GetLength()<=6)
{
filew.WriteString(ver.Left(5)+_T(".."));
}
else
filew.WriteString(ver);
}
}
if(i==16)
{
CString day=str.Mid(18,6);
filew.WriteString(day);
}
if(i==17)
{
CString port=str.Mid(13,6)+'\n';
filew.WriteString(port);
}//i==17结束
}//for结束
}//第一支路结束 else//第二支路
{
filer.SeekToBegin();
for(int i=1; i<=20; i++)
{
if(i==1||i==2||i==3||i==4||i==5||i==6)//i=7
if(i==8||i==9||i==10||i==11||i==12 )//i=13
if(i==14||i==15||i==16) //i=17/18
if(i==19||i==20)
continue;
filer.ReadString(str);
if(i==7)
{
if(str.Mid(6, 4)==_T("GOOD"))
break;//jump out of loop
else
{
CString errorcode=str.Mid(27,4);
filew.WriteString(filer.GetFileName().Left(8));
filew.WriteString(errorcode);
filew.WriteString(_T("DS2000"));
}
}
if(i==13)
{
CString ver=str.Mid(10, 7);
filew.WriteString(ver);
} if(i==17)
{
CString day=str.Mid(18,6);
filew.WriteString(day);
} if(i==18)
{
CString port=str.Mid(13,6)+'\n';
filew.WriteString(port);
} }//for结束 }//第二支路结束
}
}
filer.Close();
filew.Close();
}//end-TRY CATCH(CFileException,e)
{
#ifdef _DEBUG
afxDump<<"file could not be opened"<<e->m_cause<<"\n";
#endif
}
END_CATCH }//while结束 CDialog::OnOK();
MessageBox("恭喜你 !你已成功地加入你的信息。");}
F:\\data\\下的一个文件&&BOM //第一行//文件名称为GPAS00A0
&,S,T,TL,FC
TEST LOG [DS2000]
SN[0GPAS00A0] MODEL[MK3252GSX] TUA[0] LUA[0]
** ERROR LOG **
L0U[0] L0R[0] L1U[0] L1R[0] L2[0] DEFECT[0]
*** GOOD ***
** X-FER DATA **
W_PASS[0] R_PASS[0] W_BLOCK[0] R_BLOCK[0] TEST VER[EC22D11]
&,S,T,PROG_VER,EC22D
&,S,T,DSTYPE,DS2000
&,S,T,CMPL1,MVL_SATA
&,S,T,TID,GPAS00A00712021200
&,S,T,TESTER,FC7715
&,S,T,MODEL,MK3252GSX
&,X,D,FIRST_PON,2//另一个文件
&&BOM //第一行//文件名称为GPAS00A0
&,S,T,TL,FC
TEST LOG [DS05]
SN[0GPAS00A0] MODEL[MK3252GSX] TUA[0] LUA[0]
** ERROR LOG **
L0U[0] L0R[0] L1U[0] L1R[0] L2[0] DEFECT[0]
*** TEST FAILURE [CODE = 0B01] ***
** X-FER DATA **
W_PASS[0] R_PASS[0] W_BLOCK[0] R_BLOCK[0] TEST VER[EC22D11]
&,S,T,PROG_VER,EC22D
&,S,T,DSTYPE,DS2000
&,S,T,CMPL1,MVL_SATA
&,S,T,TID,GPAS00A00712021200
&,S,T,TESTER,FC7715
&,S,T,MODEL,MK3252GSX
&,X,D,FIRST_PON,2
//异常文件
&&BOM
&,S,T,TL,F2
TEST LOG [DS05]
SN[0GPAS03H0] MODEL[MK3252GSX] TUA[0] LUA[0]
** ERROR LOG **
L0U[0] L0R[0] L1U[0] L1R[0] L2[0] DEFECT[0]
*** TEST FAILURE [CODE = T19F] ***
** X-FER DATA **
W_PASS[0] R_PASS[0] W_BLOCK[0] R_BLOCK[0]
PALET_ID:1 PORT:48
SEND:IHSSR : EF
Mecha No. : GPAS03H0
Result : BUSY
Start_Time : 2007/11/27 22:02
Pal-Port : F21448
HR Version : JC25DN5
DEFECT : 0000
SSR : 4C
Reserved : 56303130533530000000000000000000000000
Check Sum : 95PALET_ID:1 PORT:48
SEND:WHWH
00..............................
&,S,T,PROG_VER,JC25DN5......X...
&,S,T,DSTYPE,SHR.25DN5......X...
&,S,T,CMPL1,MVL_SATA.5......X...
&,S,T,TID,GPAS03H00711272202....
&,S,T,TESTER,F21448.0...........
&,S,T,MODEL,MK3252GSX...........
&,X,D,FIRST_PON,2...0...........
&,X,D2,MEASURE_READ,1,256.......
&,X,D2,REPEAT_WRITE,0,256.......
&,X,D,FORMAT_ALL,0..0...........
&,X,D,SURFACE_SEEK,0............
&,X,D,FW1BIN_PHEAD,0............
&,X,D,FW1BIN_FORMAT,0...........
&,X,D2,GETPARA_REV,0,65531......
&,X,D,VARIABLE_TPI,1............
&,S,T,UP_WC,f.......0...........
&,S,T,UP_RC,10......0...........
&,S,T,UP_INITWC,19..0...........
&,S,D,RAPIT_VER,26..0...........
&,S,D,PCBID,01......0...........
&,S,T,OPT,H/ET4200..............
&,S,T,EXTOPT,/HT0/ME0/MT0.......
&,S,T,UP_WC,f.......0...........
&,S,T,UP_RC,10......0...........
&,S,T,UP_INITWC,19..0...........
&,S,T,UP_WC,f.C,....0...........
&,S,T,UP_RC,10.,....0...........
&,S,T,UP_INITWC,19..0...........
&,S,D,FW_VER,LV010S50...........
&,C,D3,UMODE_CHS,620181,16,63...
&,C,D3,MMODE_CHZ,123152,4,36....
&,S,T,DFMT,36-3420-32-12........
&,S,T,SYSDATA,123140-123121-10!.
!0-116-2-20-1-4-21.0-123121-10!.
&,S,T,MECHADATA,156-27-111......
&,S,T,HDPARA,12-20-2............
&,X,S,STP1,0.... ...0...........
&,X,S,STP2,0.... ...0...........
&,X,S,STP3,0.... ...0...........
&,S,T,HEADTYPE,0....0...........
&,X,D,PONTIME,2.....0...........
&,S,D,MODEL,MK3252GSX ..........
&,X,D,ROTATE,0......0...........
&,X,D,ROTATE_TM,480.0...........
&,X,S,STP4,532.. ...0...........
&,X,H,CO_MAX,128119,128266,128!.
!233,127954.........128266,1....
&,X,H,CO_MEAN,128097,128244,12!.
!8192,127913........,128244,....
&,X,H,CO_MIN,128076,128223,128!.
!152,127873.........128223,1....
&,X,H,CYL-OFFSET,-116,-182,-19!.
!6,192.YL-OFFSET,-116,-182,-19!.
&,X,D,CylOffset_TM,79...........
&,X,D,HensinComp_TM,11..........
&,X,H,1HEN_SIN,-5,-15,82,74.....
&,X,H,1HEN_COS,91,87,-165,-169..
&,X,H,2HEN_SIN,7,0,7,-2.5,-1....
&,X,H,2HEN_COS,-4,1,-11,7.-1....
&,X,H,3HEN_SIN,-2,0,1,6.7.-1....
&,X,H,3HEN_COS,3,0,0,0..7.-1....
&,X,H,4HEN_SIN,0,0,0,0..7.-1....
&,X,H,4HEN_COS,0,0,0,0..7.-1....