여러 가지 방법으로 처리 할 수 있습니다. 매우 일반적인 방법은 이전 문자열을 삭제하고 새 파일의 이름을 이전 파일 이름으로 변경하여 새 문자열로 파일을 만드는 것입니다.
그게 맞으면,이 콘솔 응용 프로그램을 방해 할 수 있습니다.
매개 변수 1
매개 변수 2 검색 할 문자열 것은, 내가 만들고있어
매개 변수 (3) 파일 경로 기본적으로
이다 사용할 수있는 대체 텍스트입니다 새 파일에 대한 일부 STD 스트림과 이전 파일에서 해당 문자열이있는 경우 해당 문자열을 찾은 경우 해당 문자열을 대체 한 다음 치환 발생 여부와 관계없이 결과를 파이프합니다 새 파일의 새 행으로 편집하십시오.
그런 다음 스트림을 닫고 파일 크기를 확인한 다음 비어 있지 않은 파일을 만드는 데 성공하면 이전 파일을 삭제하고 새 파일의 이름을 이전 파일 이름으로 변경합니다.
오류 코드 일명 errorlevel이 2 인 경우 입력 스트림이 작동하지 않는다는 의미입니다. 그것이 -1이면, 우리는 성공적으로 새로운 파일을 찾아서 대체하지 못했음을 의미합니다. 1 인 경우 올바른 매개 변수를 입력하지 않았 음을 의미합니다. 0 번 출구 만 성공을 나타냅니다.
이 기능을 사용하려면 예외 처리 및 더 강력한 파일 백업 솔루션을 추가해야합니다.
#include <iostream>
#include <fstream>
#include <string>
#include <sys\stat.h>
using namespace std;
int main(int argc, char * argv[])
{
if (argc != 4) { return 1; }
int exit_code = -1;
string textToFind = string(argv[1]);
string replacementText = string(argv[2]);
string fileToParse = string(argv[3]);
string fileToWrite = fileToParse+".rep";
ifstream inputFileStream(fileToParse, ifstream::in);
if (!inputFileStream.good()) { return 2; }
ofstream outputFileStream(fileToWrite);
string fileLine;
while (getline(inputFileStream, fileLine))
{
size_t substringPos = fileLine.find(textToFind);
if (substringPos != string::npos)
{
fileLine.replace(substringPos, textToFind.size(), replacementText);
}
outputFileStream << fileLine << '\n';
}
outputFileStream.close();
inputFileStream.close();
struct stat st;
stat(fileToWrite.c_str(), &st);
int new_file_size = st.st_size;
if (new_file_size > 0)
{
if (remove(fileToParse.c_str())==0)
{
if (rename(fileToWrite.c_str(), fileToParse.c_str())==0)
{
exit_code = 0;
}
}
}
return exit_code;
}
filein >> 토큰을 읽습니다. 토큰은 공백으로 구분됩니다. 보십시오'종류 = 원본> 아침
'. –
http://www.cplusplus.com/reference/string/string/getline/을 사용하여 파일을 한 줄씩 읽은 다음 http://www.cplusplus.com/reference/string/string/find/에서 하위 문자열을 찾으십시오. 그리고 찾으면 http://www.cplusplus.com/reference/string/string/replace/로 대체하십시오. – Marandil