2014-01-14 2 views
0

첫 단어 발생 위치를 찾는 데 어려움을 겪고 있습니다. 소프트웨어는 지정된 단어를 결정된 txt 파일로 검색해야합니다. 그래서 저는 fstream 라이브러리를 사용하여 열었습니다. 그리고 결국 무언가를 씁니다. 그러나 나는 그 단어의 정확한 위치를 얻기 위해 어떻게 소프트웨어를 만들 것인지 전혀 모른다. 내가 가진 것은 이것이다 :C++ txt 파일의 한 줄을 읽고 수정하십시오.

#include <iostream> 
#include <fstream> 
#include <string.h> 

using namespace std; 

int main() { 
    fstream myfile; // fstream to read and write the myfile 
    string cText = "\n--something--!\n"; // what it will write 
    string line; // will assign the getline() value; 
    unsigned int pos = 0; //will be assigned to "seekp" - where it will start to write 

    myfile.open("example.html", ios::binary | ios::in | ios::out); 

    if(!myfile) { 
    cout << "File does not exist!" << endl; 
    cin.get(); 
    return false; 
    } 

    do { 
    size_t found = line.find("<head>"); 
    cout << string::npos << endl; 
    if (found != string::npos) { 
     cout << line << endl; 

    } 
    }while(getline(myfile, line)); 

    myfile.seekp(pos+1, ios::beg); 
    //myfile.write(cText, strlen(cText)); //write cText 
    myfile.close(); 
    cin.get(); 
    return 0; 
} 

어떤 제안이라도?

+2

......... tellg? – derpface

답변

1

파일의 바이트를 변경하지 마십시오. 새 파일을 만들고 교체 할 파일을 찾을 때까지 줄을 복사 한 다음 새 줄을 출력 한 다음 나머지 줄을 출력하십시오. 한 문자열을 다른 문자열과 정확히 같은 수의 문자로 바꾸지 않으면 파일의 다음 줄을 재정의 할 것이므로이를 피할 수있는 좋은 방법이 없습니다.

원하는 경우 원본 파일을 삭제하고 새 파일의 이름을 해당 이름으로 바꿀 수 있습니다.

+0

또한 파일이 너무 크거나 사용자가 전체 파일을 유지하면서 메모리를 낭비하지 않으려는 경우 사용자는 데이터를 버퍼링하여 청크로 새 파일에 쓰고 버퍼를 정리하고 더 많은 데이터를 읽을 수 있습니다 . 마지막에 오래된 파일을 지우고 임시 파일의 이름을 변경하십시오. –

관련 문제