• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 298  文章 - 377  trackbacks - 0
            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            常用鏈接

            留言簿(34)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            收藏夾

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            c++中輸出和輸入導屏幕和鍵盤的類別聲明包含再標題文件<iostrream.h>中,而磁盤類文件的 I/O則聲明再包含標題文件<fstream.h>內(nèi)。

            輸入和輸出格式:

            輸出到磁盤  ofsteam 識別字(“文件名”)

            從磁盤讀文件 ifsteam 識別字("文件名“)

            例如:

             ofstream outfile("data.txt"); //寫入到磁盤的data.txt中

            格式化輸入輸出:

            1  整數(shù)數(shù)據(jù)的輸入輸出

            整數(shù)數(shù)據(jù)存儲再磁盤內(nèi),每個文字各占一個字節(jié)。

            例如:

            #include <fstream.h>

            #include <iostream.h>

            #inlude <conio.h>

            void main()

            {

              ofstream outfile("data.txt");  //寫入文件

              for(int i=0;i<10;i++)

               outfile<<i<<" ";    //空格是為了避免數(shù)值連接在一起加上去的,此文件大小為20字節(jié)

              cout<<"ok,press a key!";

            gerch();

            程序執(zhí)行后用記事本打開可以看到數(shù)據(jù)

            0 1 2 3 4 5 6  7 8 9

            同樣讀取文件語句為:

            int data;

            ifstream infile("data.txt");

            for(int i=0;i<10;i++)

            {

              infile>>data ;  //讀數(shù)據(jù)的時候因為數(shù)據(jù)間有一個空格才能完整的讀出,

             cout<<data<<" ";  //輸出到屏幕,加上空格是為了分開數(shù)字

            }

            2 字符數(shù)據(jù)的輸入

            字符的輸出方式以put(ch)為存入語句,讀取語句為get(ch)

            例如:

            char str[]="hello this is a c++ programe!\n"

                               "i know this difference \n"

                                "and mocive";

            ofstream outfile ("data.txt");

            for(int i=0;i<strlen(Str);i++)

             outfile.put(str[i]);

            讀取:

            char ch;

            ifstream infile("data.txt");

            while(infile)

            {

             infile.get(ch);

            cout<<ch;

            }

             getch();

            }

            3 字符串數(shù)據(jù)的輸入

            數(shù)據(jù)多的時候讀寫速度比較快,輸入時以整行字符串加上換行符號一次寫入。讀取的時候以語句getline(buffer,max),來讀取整行數(shù)據(jù),直到遇到換行符,每行結(jié)尾的\n并不讀入,所以在 輸出的時候需要加上換行符號,否則數(shù)據(jù)會連接在一起。

            例子:

             ofstream outfile("strdata.txt");

            outfile<<"use your vote\n";

            outfile<<"ouse your weise\n";

            讀取:

            const MAX=80;

            char buffer[MAX];

            ifstream infile("strdata.txt");

            while(infile)

            {

              infile.getline(buffer,MAX);

             cout<<buffer<<endl;

            }                   

            4 浮點數(shù)

            浮點數(shù)因為有小數(shù)點,在存儲數(shù)據(jù)時與整數(shù)相同,只要每個數(shù)據(jù)加上一個空格就可以區(qū)隔相鄰的數(shù)據(jù)

            6 二進制文件

            上述的格式化文件比較占用硬盤控件,采用二進制存儲就可以節(jié)約很多控件。它使用write,read()來存儲和讀取。

            ofstream 識別字(”文件名“,ios::binary);

            write( 寫入地址,寫入大小)

            ifstream  識別字(”文件名“,ios:binary);

            識別字.read(讀取地址,讀取大小);

            例如:infile.read((char*)buffer,sizeof(數(shù)據(jù)類型));

            關閉文件

            識別字.close();

            例子:

            ofstream outfile("data.dat",ios::binary);

            for(int i=0;i<100;i++)

            {

               n[0]=i+1;

              outfile.write((Char*)n,sizeof(int)); //還可以用變量和數(shù)組為例

            //  outfile.write((Char*)&i,sizeof(int));  i 為變量

            // outfile.write((Char*)n,sizeof(int));  n為數(shù)組

            }

            outfile.close();

            ifstream inifile("data.dat",ios:binary);

            for(i=0;i<100;i++)

            { inifile.read((Char*)n,sizeof(int);

             cout<<n[0]<<" ";

            }

            7    隨機存取文件

            文件能夠隨意讀出,讀出后又可以更新,更新后可以回存到源文件內(nèi)。fstream  file ;

            file.open("文件名",存取模式);

            file.open("x.dat",ios::app|ios::in|ios::out|ios::binary);

            in 打開文件輸入或者讀取   ifstream

            out 打開文件輸出或者寫入 ofstream

            ate 從文件尾開始寫入或者讀取

            app 加在文件尾

            arunc 若文件存在,講其長度設為0

            binary 打開二進制文件

            二進制文件中有一個指針,指向當前數(shù)據(jù)在文件中的位置,這個文件指針和一般的指針變量不一樣,它只是一個純粹的指示器。

            函數(shù)介紹

            seekg()

            seekg(0) 指針移到文件的最前面

            seekg(0,ios::cur);把當前的指針當作0

            seekg(0,ios::end);將指針移到文件尾,若再配合file.tellg()則可以求出文件的大小為多少bytes

            以下兩個操作都必須在文件關閉后才可以使用

            remove("文件名”);把這個文件刪除

            rename("舊文件名","新文件名");

             

            #include <iostream> 
            #include 
            <fstream> 
            using namespace std; 
             
            int main() 

              
            int n[5= {12345}; 
              register 
            int i; 
             
              ofstream out(
            "test", ios::out | ios::binary); 
              
            if(!out) { 
                cout 
            << "Cannot open file.\n"
                return 
            1
               } 
             
              out.write((char 
            *&n, sizeof n); 
             
              out.close(); 
             
              
            for(i = 0; i <5; i++// clear array 
                n[i] 
            = 0
             
              ifstream in(
            "test", ios::in | ios::binary); 
              
            if(!in) { 
                cout 
            << "Cannot open file.\n"
                return 
            1
              } 
             
              in.read((char 
            *&n, sizeof n); 
             
              
            for(i = 0; i <5; i++// show values read from file 
                cout 
            << n[i] << " "
             
              in.close(); 
             
              return 
            0
            }


            posted on 2007-06-14 13:23 聶文龍 閱讀(68619) 評論(2)  編輯 收藏 引用 所屬分類: c++

            FeedBack:
            # re: ofstream ifstream 文件操作 2007-06-14 13:24 聶文龍
              在C++中,有一個stream這個類,所有的I/O都以這個“流”類為基礎的,包括我們要認識的文件I/O,stream這個類有兩個重要的運算符:

            1、插入器(<<)
              向流輸出數(shù)據(jù)。比如說系統(tǒng)有一個默認的標準輸出流(cout),一般情況下就是指的顯示器,所以,cout<<"Write Stdout"<<'n';就表示把字符串"Write Stdout"和換行字符('n')輸出到標準輸出流。

            2、析取器(>>)
              從流中輸入數(shù)據(jù)。比如說系統(tǒng)有一個默認的標準輸入流(cin),一般情況下就是指的鍵盤,所以,cin>>x;就表示從標準輸入流中讀取一個指定類型(即變量x的類型)的數(shù)據(jù)。

              在C++中,對文件的操作是通過stream的子類fstream(file stream)來實現(xiàn)的,所以,要用這種方式操作文件,就必須加入頭文件fstream.h。下面就把此類的文件操作過程一一道來。

            一、打開文件
              在fstream類中,有一個成員函數(shù)open(),就是用來打開文件的,其原型是:

            void open(const char* filename,int mode,int access);

            參數(shù):

            filename:  要打開的文件名
            mode:    要打開文件的方式
            access:   打開文件的屬性
            打開文件的方式在類ios(是所有流式I/O類的基類)中定義,常用的值如下:

            ios::app:   以追加的方式打開文件
            ios::ate:   文件打開后定位到文件尾,ios:app就包含有此屬性
            ios::binary:  以二進制方式打開文件,缺省的方式是文本方式。兩種方式的區(qū)別見前文
            ios::in:    文件以輸入方式打開
            ios::out:   文件以輸出方式打開
            ios::nocreate: 不建立文件,所以文件不存在時打開失敗 
            ios::noreplace:不覆蓋文件,所以打開文件時如果文件存在失敗
            ios::trunc:  如果文件存在,把文件長度設為0
              可以用“或”把以上屬性連接起來,如ios::out|ios::binary

              打開文件的屬性取值是:

            0:普通文件,打開訪問
            1:只讀文件
            2:隱含文件
            4:系統(tǒng)文件
              可以用“或”或者“+”把以上屬性連接起來 ,如3或1|2就是以只讀和隱含屬性打開文件。

              例如:以二進制輸入方式打開文件c:config.sys

              fstream file1;
              file1.open("c:config.sys",ios::binary|ios::in,0);

              如果open函數(shù)只有文件名一個參數(shù),則是以讀/寫普通文件打開,即:

              file1.open("c:config.sys");<=>file1.open("c:config.sys",ios::in|ios::out,0);

              另外,fstream還有和open()一樣的構(gòu)造函數(shù),對于上例,在定義的時侯就可以打開文件了:

              fstream file1("c:config.sys");

              特別提出的是,fstream有兩個子類:ifstream(input file stream)和ofstream(outpu file stream),ifstream默認以輸入方式打開文件,而ofstream默認以輸出方式打開文件。

              ifstream file2("c:pdos.def");//以輸入方式打開文件
              ofstream file3("c:x.123");//以輸出方式打開文件

              所以,在實際應用中,根據(jù)需要的不同,選擇不同的類來定義:如果想以輸入方式打開,就用ifstream來定義;如果想以輸出方式打開,就用ofstream來定義;如果想以輸入/輸出方式來打開,就用fstream來定義。

            二、關閉文件
              打開的文件使用完成后一定要關閉,fstream提供了成員函數(shù)close()來完成此操作,如:file1.close();就把file1相連的文件關閉。

            三、讀寫文件
              讀寫文件分為文本文件和二進制文件的讀取,對于文本文件的讀取比較簡單,用插入器和析取器就可以了;而對于二進制的讀取就要復雜些,下要就詳細的介紹這兩種方式

              1、文本文件的讀寫
              文本文件的讀寫很簡單:用插入器(<<)向文件輸出;用析取器(>>)從文件輸入。假設file1是以輸入方式打開,file2以輸出打開。示例如下:

              file2<<"I Love You";//向文件寫入字符串"I Love You"
              int i;
              file1>>i;//從文件輸入一個整數(shù)值。

              這種方式還有一種簡單的格式化能力,比如可以指定輸出為16進制等等,具體的格式有以下一些

            操縱符 功能 輸入/輸出
            dec 格式化為十進制數(shù)值數(shù)據(jù) 輸入和輸出
            endl 輸出一個換行符并刷新此流 輸出
            ends 輸出一個空字符 輸出
            hex 格式化為十六進制數(shù)值數(shù)據(jù) 輸入和輸出
            oct 格式化為八進制數(shù)值數(shù)據(jù) 輸入和輸出
            setpxecision(int p) 設置浮點數(shù)的精度位數(shù) 輸出

              比如要把123當作十六進制輸出:file1<<hex<<123;要把3.1415926以5位精度輸出:file1<<setpxecision(5)<<3.1415926。

              2、二進制文件的讀寫
            ①put()
              put()函數(shù)向流寫入一個字符,其原型是ofstream &put(char ch),使用也比較簡單,如file1.put('c');就是向流寫一個字符'c'。

            ②get()
              get()函數(shù)比較靈活,有3種常用的重載形式:

              一種就是和put()對應的形式:ifstream &get(char &ch);功能是從流中讀取一個字符,結(jié)果保存在引用ch中,如果到文件尾,返回空字符。如file2.get(x);表示從文件中讀取一個字符,并把讀取的字符保存在x中。

              另一種重載形式的原型是: int get();這種形式是從流中返回一個字符,如果到達文件尾,返回EOF,如x=file2.get();和上例功能是一樣的。

              還有一種形式的原型是:ifstream &get(char *buf,int num,char delim='n');這種形式把字符讀入由 buf 指向的數(shù)組,直到讀入了 num 個字符或遇到了由 delim 指定的字符,如果沒使用 delim 這個參數(shù),將使用缺省值換行符'n'。例如:

              file2.get(str1,127,'A');//從文件中讀取字符到字符串str1,當遇到字符'A'或讀取了127個字符時終止。

            ③讀寫數(shù)據(jù)塊
              要讀寫二進制數(shù)據(jù)塊,使用成員函數(shù)read()和write()成員函數(shù),它們原型如下:

                read(unsigned char *buf,int num);
                write(const unsigned char *buf,int num);

              read()從文件中讀取 num 個字符到 buf 指向的緩存中,如果在還未讀入 num 個字符時就到了文件尾,可以用成員函數(shù) int gcount();來取得實際讀取的字符數(shù);而 write() 從buf 指向的緩存寫 num 個字符到文件中,值得注意的是緩存的類型是 unsigned char *,有時可能需要類型轉(zhuǎn)換。

            例:

                unsigned char str1[]="I Love You";
                int n[5];
                ifstream in("xxx.xxx");
                ofstream out("yyy.yyy");
                out.write(str1,strlen(str1));//把字符串str1全部寫到y(tǒng)yy.yyy中
                in.read((unsigned char*)n,sizeof(n));//從xxx.xxx中讀取指定個整數(shù),注意類型轉(zhuǎn)換
                in.close();out.close();

            四、檢測EOF
              成員函數(shù)eof()用來檢測是否到達文件尾,如果到達文件尾返回非0值,否則返回0。原型是int eof();

            例:  if(in.eof())ShowMessage("已經(jīng)到達文件尾!");

            五、文件定位
              和C的文件操作方式不同的是,C++ I/O系統(tǒng)管理兩個與一個文件相聯(lián)系的指針。一個是讀指針,它說明輸入操作在文件中的位置;另一個是寫指針,它下次寫操作的位置。每次執(zhí)行輸入或輸出時,相應的指針自動變化。所以,C++的文件定位分為讀位置和寫位置的定位,對應的成員函數(shù)是 seekg()和 seekp(),seekg()是設置讀位置,seekp是設置寫位置。它們最通用的形式如下:

                istream &seekg(streamoff offset,seek_dir origin);
                ostream &seekp(streamoff offset,seek_dir origin);

              streamoff定義于 iostream.h 中,定義有偏移量 offset 所能取得的最大值,seek_dir 表示移動的基準位置,是一個有以下值的枚舉:

            ios::beg:  文件開頭
            ios::cur:  文件當前位置
            ios::end:  文件結(jié)尾
              這兩個函數(shù)一般用于二進制文件,因為文本文件會因為系統(tǒng)對字符的解釋而可能與預想的值不同。

            例:

                 file1.seekg(1234,ios::cur);//把文件的讀指針從當前位置向后移1234個字節(jié)
                 file2.seekp(1234,ios::beg);//把文件的寫指針從文件開頭向后移1234個字節(jié)
              回復  更多評論
              
            # re: ofstream ifstream 文件操作 2007-06-14 22:56 聶文龍
            C++ 中關于文件的讀入和輸出。
            Example : 從in.txt 文件中讀入數(shù)據(jù),并輸出到out.txt中,輸出的文件中每行之間有一空行相隔



            #include
            #include
            #include
            using namespace std;
            int main (int){

            string s;

            ifstream inf;
            inf.open("in.txt");

            //打開輸出文件
            ofstream outf;
            outf.open("out.txt");


            //從in.txt 文件中讀入數(shù)據(jù),并輸出到out.txt中
            /*其中 getline(參1,參2); 作用是從 inf 指向的文件中
            每次讀入一行,把數(shù)據(jù)存到字符串s 中,從第一行開始
             每讀完一行后,系統(tǒng)自動地把指針指向下一行,不用人為
             干預*/
            while( getline(inf,s ) ){
            outf << s << '\n\n'; //我這里并沒有用到字符串
            cout << s << endl << endl; //數(shù)組,而是只用了一個串
            } //S,是因為我每次讀入一行
            //后,立即就把它輸出到


            //out.txt中,跟著讀下一行

            inf.close();
            outf.close();
            return 0;
            }

            ========================================方法二============================================

            #include
            #include
            #include
            #include
            using namespace std;
            int main (int){



            ifstream inf;
            inf.open("in.txt");


            ofstream outf;
            outf.open("out.txt");

            /*這道題有許多解法的,重要的要了它文件輸入輸出的原理
             你可以一行行地讀入,也可以一個字一個字地讀入,或一個詞
             一個詞地讀入,整型或浮點型讀入,看你定義的是哪種數(shù)據(jù)類型*/

            char c;
            inf >> noskipws; //不忽略空白,把每行最后那個'\n'
            //也讀進來。
            while(inf >>c)
            {
            if (c == '\n'){ //遇到 '\n' 回車、換行。
            outf << "\n\n"; //輸出到文件
            cout << "\n\n"; //輸出到屏幕
            }

            else{
            outf << c; //輸出到文件
            cout << c; //輸出到屏幕
            }
            }
            /* 同樣的原理,從文件中讀入單個字符,每次讀入一個后,
              系統(tǒng)自動地把指針指向下一個字,而不用你指定這次讀哪個,
            下次讀哪個,除非你不想從第一個開始讀,比如說:我想從
            第100個字開始讀,或者我想讀最后50個字。這就需要調(diào)用
            相應的函數(shù),并指定相應的位置。*/


            inf.close();
            outf.close();
            return 0;
            }





            主  題: 請問VC++中,怎么實現(xiàn)讀取.txt文件時的行定位,就是讀取指定的行的內(nèi)容.





            請問VC++中,怎么實現(xiàn)讀取.txt文件時的行定位,就是讀取指定的行的內(nèi)容.





            ?
            一行一行的讀到你想要的那行。
            CStdioFile的ReadString()方法是讀一行。


            [VC] 文件對話框讀寫文本文件
            2005年 01月23日
            文件對話框讀寫文本文件/*************************************************
            * 讀文本文件
            **************************************************/
            //顯示文件打開對話框
            CFileDialog dlg(TRUE, "SQL", "*.txt",OFN_HIDEREADONLY
            |OFN_OVERWRITEPROMPT,"Text Files(*.txt)|*.txt|SQL Files(*.sql)|*.sql|All Files(*.*)|*.*||");
            if ( dlg.DoModal()!=IDOK ) return;
            //獲取文件的絕對路徑
            CString sFileName=dlg.GetPathName();
            //打開文件
            CStdioFile out;
            out.Open(sFileName, CFile::modeRead);
            CString sSql="",s;
            //讀取文件
            do{
            out.ReadString(s);
            sSql=sSql+s+"\r\n";
            }while ( out.GetPosition()out.Close();
            //AfxMessageBox(sSql);


            /*************************************************
            * 寫文本文件
            **************************************************/
            //顯示文件保存對話框
            CFileDialog dlg(FALSE, "SQL", "*.txt",OFN_HIDEREADONLY
            | OFN_OVERWRITEPROMPT,"Text Files(*.txt)|*.txt|SQL Files(*.sql)|*.sql|All Files(*.*)|*.*||");
            if ( dlg.DoModal()!=IDOK ) return;
            //獲取文件的絕對路徑
            CString sFileName=dlg.GetPathName();
            CStdioFile out;
            //打開文件
            out.Open(sFileName, CFile::modeCreate | CFile::modeWrite);
            //保存文件
            CString sSql="文本文件內(nèi)容";
            out.WriteString(sSql);
            out.Close();
            我要讀一個文件,但是我想讓一行一行的讀,而且每行有不一定長度的,應該怎么做呢?
            (cqwally發(fā)表于2001-8-9 23:37:43)

            1)
            程序如下:
            {

            .....................
            CStdioFile file;
            CString str;
            file.Open("test.txt",CFile::modeRead,NULL);
            file.ReadString(str);
            MessageBox(str);//第一行
            file.ReadString(str);
            MessageBox(str);//第二行
            .....................
            }



            看看兩次顯示的有什么不同。test.txt文件如下:
            第一行
            第二行


            2)
            我用CFile::Write,怎樣才可以寫入回車,空格?而且我要寫兩欄要對齊?
            回車換行:"\r\n"

            如何正確的使用CFile::Open中的參數(shù)?
            (taxiblackangel發(fā)表于2001-8-14 10:58:16)

            [問題提出]
            我設計了一個從記事本中讀數(shù)據(jù)的程序。將數(shù)據(jù)顯示在視中。
            代碼如下:

            void CTry1View::OnShow()
            {
            // TODO: Add your command handler code here
            CStdioFile file;

            CString filename;
            CFileDialog opendlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,".(*.txt)|*.txt|All Files(*.*)|*.*||",NULL);
            if(opendlg.DoModal()==IDOK)
            filename=opendlg.GetPathName();
            if(file.Open(filename,CFile::modeCreate|CFile::modeReadWrite|CFile::typeText)==0)
            {

            AfxMessageBox("error");
            return;
            }

            while(file.ReadString(string))
            {
            strList.AddTail(string);
            string.ReleaseBuffer();
            }

            flag=true;
            Invalidate();
            }
            結(jié)果不但在視中沒有任何顯示,而且記事本中的數(shù)據(jù)也全部丟失。變成了一片空白。真是搞不懂了。
            記事本中的數(shù)據(jù)是我隨便寫的。如下:
            11
            222
            3333
            44444
            .......

            [解決方法]
            在file.Open(filename,CFile::modeCreate|CFile::modeReadWrite|CFile::typeText)中,CFile::modeCreate去掉,modeCreate的意思是沒有此文件就建立,有了此文件,清空文件.


            最新評論 [發(fā)表評論] 查看所有評論 推薦給好友 打印

            最好是這樣file.Open(filename,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite|CFile::typeText),因為CFile::modeNoTruncate意思是文件即使存在也不清空。 ( lichihang 發(fā)表于 2003-12-29 8:33:00)

            如何使用CStdioFile::ReadString來讀文件?
            (yello2000i發(fā)表于2001-8-16 17:04:39)

            [問題提出]
            一數(shù)據(jù)文件一行一條記錄,我用file.readstring()一次讀一行,并對讀取的數(shù)據(jù)做一些處理;
            請問:while(文件還沒到結(jié)尾)
            {
            file.readstring();
            ...
            }
            ??文件還沒到結(jié)尾如何判斷?
            如果,到了指定位置不讀了,過一會兒再讀又如何做?
            [解決方法]
            while()中不用另加判斷條件了,因為CStdioFile::ReadString()本身就是判斷標志,若沒有了(文件到頭)返回NULL,因此:while(file.ReadString(s)){}就可.
            [程序?qū)崿F(xiàn)]
            假設你已有了名為ts.txt的文件在你的工程目錄下:
            {
            CStdioFile file;
            CString sss;
            char ccc[100];
            DWORD o=0;
            int ol=0;
            file.Open("ts.txt",CFile::modeRead);
            while(file.ReadString(sss))
            {
            ol++;
            if(ol>1)//讀兩次就不讀了.
            break;

            }
            o=file.GetPosition();//記錄上次的結(jié)果(讀到哪了)
            .................
            file.Seek(o,0);//接著上回讀
            while(file.ReadString(sss))
            {
            strcpy(ccc,sss);
            AfxMessageBox(ccc);
            }
            }




            這樣的命名叫人看了好難受的 又是o
            又是0
            我 覺得要測試的 字符就是"\n, \r, \r\n, or EOF. "
            就可以了
            ( wshust 發(fā)表于 2004-3-4 21:28:00)

            上面lichihang,我試了一下,事實并不是如你所說的那樣讀到空行就停了,而是一直讀下去呀!! ( pamir 發(fā)表于 2004-2-9 8:31:00)

            我不同意這個回答!
            因為CStdioFile::ReadString()返回NULL的條件是遇到文件尾或者一個空行,所以如果說txt文件的某一條記錄后面連續(xù)出現(xiàn)了若干條空行,那么CStdioFile::ReadString()函數(shù)也會返回NULL,這樣文件并沒有讀取完畢! ( lichihang 發(fā)表于 2003-12-29 8:26:00)


            刪除目錄及目錄下所有文件與子目錄
            (Hermess發(fā)表于2002-5-24 22:10:27)

              VC++只提供了刪除一個空目錄的函數(shù),而在實際應用中往往希望刪除其下有很多子目錄與文件的目錄。為了實現(xiàn)這一功能,我編寫了DeleteDirectory 函數(shù),它可以實現(xiàn)這一功能。

            函數(shù)原型:BOOL DeleteDirectory(char *DirName);
            返回值:成功刪除時返回TRUE,否則返回FALSE
            參數(shù)DirName為要刪除的目錄名,必須為絕對路徑名,如“c:\\temp"。

            函數(shù)定義如下:
            BOOL DeleteDirectory(char *DirName)
            {
            CFileFind tempFind;
            char tempFileFind[200];
            sprintf(tempFileFind,"%s\\*.*",DirName);
            BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
            while(IsFinded)
            {
            IsFinded=(BOOL)tempFind.FindNextFile();
            if(!tempFind.IsDots())
            {
            char foundFileName[200];
            strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));
            if(tempFind.IsDirectory())
            {
            char tempDir[200];
            sprintf(tempDir,"%s\\%s",DirName,foundFileName);
            DeleteDirectory(tempDir);
            }
            else
            {
            char tempFileName[200];
            sprintf(tempFileName,"%s\\%s",DirName,foundFileName);
            DeleteFile(tempFileName);
            }
            }
            }
            tempFind.Close();
            if(!RemovwDirctory(DirName))
            {
            MessageBox(0,"刪除目錄失敗!","警告信息",MK_OK);
            return FALSE;
            }
            return TRUE;
            }
            搜集--- 關于“按行讀取”“查找特定字符串”“替換字符串”操作
            氣死了,剛剛誤操作,畫了一半的表格全都沒了。哼哼,沒有好興致說些有趣的話了,愛看不看,愛聽不聽。氣死了!偏偏還要在網(wǎng)頁上寫,還要不保存!

            不說上午的事情了,

            直奔主題氣死!

            關鍵詞:文本文件 按行讀取 查找特定字符串 替換字符串

            C/C++ VC/MFC

            按行:fgets();getline(); StdioFile::ReadString(buf)CArchive::ReadString(CString &str)

            查找:strstr();_tcschr();fseek() buf.Find(str)(buf是CString類型的)

            替換:替換字符串

            代碼:

            CStringFile CLASS


            我用fopen打開一個txt文件,想查找某一字符串,找到這個字符串后,再讀取它對應行的

            其他數(shù)據(jù),請教大俠指點小弟如何去做,用什么函數(shù)。謝謝。



            a. fopen過后,逐行讀入str, 用 strstr 判斷是否含有特定字符串. 例子:

            FILE *fd=fopen("你要打開的文件","r+");

            char tmpLine[200];

            while(fgets(tmpLine,200,fd)!=NULL)

            {

            if( strstr(tmpLine,"你要找的字符串"))

            {

            printf("find the string!\n");

            break;

            }

            memset(tmpLine,0,200);

            }

            free(tmpLine);



            //從指定文件中提取指定字符串

            CStrOP& CStrOP::GetSpecifyString(LPCTSTR szSpec, CArchive *ar, BOOL bMid, int iMid, int *pRow, int *pCol)

            {

            do

            {

            //讀取文件內(nèi)容

            if(ar)

            {

            //判斷是否到了文件最末

            if(!ar->ReadString(*this))

            {

            //未找到找到字符串

            if(pRow)

            {

            *pRow = 0;

            }

            if(pCol)

            {

            *pCol = 0;

            }

            (*this).Format("%s", "");

            break;

            }

            }

            //獲得需要查找的字符串所在行

            if(pRow)

            {

            (*pRow)++;

            }

            //去掉空白字符

            TrimLeft();

            TrimRight();

            //判斷是否已經(jīng)找到需要的字串

            if(Find(szSpec) >= 0)

            {

            //獲得需要查找的字符串所在列

            if(pCol)

            {

            *pCol = Find(szSpec) + 1;

            }

            //判斷是否需要提取字符串

            if(bMid)

            {

            //判斷提取字符串的規(guī)則,如果iMid為-1,則不論字串在任何位置,都可以

            //進行提取;否則,字串必須在指定位置iMid時才可以提取

            if(iMid == -1)

            {

            (*this).Format("%s", Mid(Find(szSpec) + lstrlen(szSpec)));

            break;

            }

            else if(iMid >= 0)

            {

            if(Find(szSpec) == iMid)

            {

            (*this).Format("%s", Mid(iMid + lstrlen(szSpec)));

            break;

            }

            }

            }

            }

            else

            {

            if(!ar)

            {

            //未找到找到字符串

            if(pRow)

            {

            *pRow = 0;

            }

            if(pCol)

            {

            *pCol = 0;

            }

            (*this).Format("%s", "");

            break;

            }

            }

            } while(1);



            return *this;

            }

            其中CStrOP是我新建的類,函數(shù)聲明為

            CStrOP& GetSpecifyString(LPCTSTR szSpec, CArchive *ar = NULL, BOOL bMid = TRUE, int iMid = 0, int* pRow = NULL, int* pCol = NULL);

            這個函數(shù)能實現(xiàn)在指定文本格式的文件中進行特定字符串的查找、提取、定位等工作,其中參數(shù)CArchive ar初始化為:

            CFile file(cMyTxtFile,CFile::modeRead)

            CArchive ar(&file, CArchive::load)

              回復  更多評論
              
            久久久精品免费国产四虎| 亚洲va中文字幕无码久久| 国产一区二区三区久久| 国产免费久久久久久无码| 日本精品久久久久久久久免费| 思思久久好好热精品国产| 久久精品中文闷骚内射| 91精品国产综合久久四虎久久无码一级 | 久久综合亚洲欧美成人| 蜜桃麻豆www久久| 18禁黄久久久AAA片| 88久久精品无码一区二区毛片| 伊人久久大香线蕉综合网站| 久久国产色AV免费看| 久久久久久毛片免费看| 久久66热人妻偷产精品9| 久久久综合香蕉尹人综合网| AV色综合久久天堂AV色综合在| 久久艹国产| 国产精品欧美久久久久无广告 | 日本精品久久久久影院日本| 久久国产精品99国产精| 亚洲午夜无码久久久久小说| 久久国产高清一区二区三区| 久久国产精品99精品国产987| 奇米影视7777久久精品| 久久99国产精品久久99小说| 久久精品免费大片国产大片| 99国内精品久久久久久久| 精品久久久久久中文字幕人妻最新| 亚洲午夜久久久| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 久久精品国产亚洲AV无码娇色| 三级三级久久三级久久| 亚洲精品无码久久毛片| 久久久网中文字幕| 国内精品久久久久久久久| 情人伊人久久综合亚洲| 97精品国产97久久久久久免费 | 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 久久婷婷色综合一区二区 |