回 帖 发 新 帖 刷新版面

主题:关于文件的读写问题

[b]请问各位我需要在Visual C++中读写文件,文件类型如下面所示:[/b]
PCB FILE 6 VERSION 2.80
0 7 0 0 0 0 0 0 0 0
FT
0 0 5000000 15020000 15460000 15020000 1000 28 0 0 0
 0 0 1 0 0
FT
0 0 15460000 15020000 17920000 12560000 1000 28 0 0 0
 0 0 1 0 0
1 1 1
 1.00000000000000E+0007  2.00000000000000E+0005  2.00000000000000E+0005  2.00000000000000E+0005
28 0
1
0
0
0
.
.
.
我需要获得FT下面一行的第3、4、5、6个数据并保存在另一个文件中,该如何表达呢?
(以前我使用的是VB编程,需要转两次文件:第一步是用Line input 把一行做为一个字符串把需要的一行保存在一个过度文件中;第二步是用input把需要的数据从过度文件中提取出来,可是在C++中我不知道如何表达![color=FF0000][b]请好心人帮帮忙!)[/b][/color]

回复列表 (共3个回复)

沙发

咋没有人帮一下忙呢?

板凳

可以使用文件偏移来实现,命名用fseek函数。。
偏移想要的位置再用fread来读数据
写数据使用fwrite

代码我就不写的。。自己好好想想吧。。
我读取mp3文件时,就是这样读的

3 楼

void CFile_readDlg::OnBtn1() 
{
    // TODO: Add your control notification handler code here
    CFileDialog fdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"txt|*.txt");
    CString filepath;
    if (fdlg.DoModal()==IDOK)
    {
        filepath=fdlg.GetPathName();
    }else{
        return;
    }
    CFile fileOpen;
    CString tmp;
    fileOpen.Open(filepath,CFile::modeRead);
    char buf[1024];
    memset(buf,0,1024);
    while(fileOpen.Read(buf,1023)>0){
        tmp+=buf;
        memset(buf,0,1024);
//        MessageBox("read");
    }
    fileOpen.Close();
    MessageBox(tmp);
    int pos;
    char data[6][100];
    CString savedata;
    while(-1!=(pos=tmp.Find("FT"))){
        tmp.Delete(0,pos+3);
        for (int i=0;i<6;i++)
        {
            memset(data[i],0,100);
        }
        sscanf((LPCSTR)tmp,"%s%s%s%s%s%s",data[0],data[1],data[2],data[3],data[4],data[5]);
        CString tmp_oneline;
        tmp_oneline.Format("%s %s %s %s",data[2],data[3],data[4],data[5]);
        savedata+=tmp_oneline;
        savedata+="\r\n";
    }
    MessageBox(savedata);
    fileOpen.Open("savedata.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);
    fileOpen.SeekToEnd();
    fileOpen.Write(savedata,savedata.GetLength());
    fileOpen.Close();
}

这段代码可以解决问题

我来回复

您尚未登录,请登录后再回复。点此登录或注册