그래서 파일을 통해 줄을 읽는 줄을 만들려고하고 줄을 기반으로 물건을 만들지 만, 몇 줄은 내가 열고 시작해야하는 다른 파일 이름이 될 수 있다는 것을 제외하고는 이 파일을 읽으면 원본 파일을 스택에 유지하면서 여러 번 발생할 수 있으며 새 파일이 EOF이면 스택의 이전 파일을 다시 팝해야합니다. 내 코드에서입력 스트림 스택 읽기 및 유지
std::ifstream* currentStream = fileStream;
// this is within a class where I pass through fileStream in its initialization
stack<std::ifstream*> fileStack = stack<std::ifstream*>();
while(!fileStack.empty() || !currentStream->eof()){
while (!currentStream->eof()) {
getline(*currentStream, lineBuf);
string line = trim(lineBuf);
if (line = blahblah) {
//do stuff
}
else if (words[0] == "file") {
auto params = extractParameters(line);
std::ifstream simpFileStream;
simpFileStream.open(params[1][0].substr(1, params[1][0].length()-2) + ".simp");
currentStream->swap(simpFileStream);
fileStack.push(&simpFileStream);
}
if(!fileStack.empty() && currentStream->eof()){
// what to do here?
fileStack.pop();
}
}
}
나는 몇 가지 방법을 시도했지만, 이것은 내가 마지막으로 저장 한 것을, 나는 기본적으로 내가 새로운 ifstream을 생성하고 현재를 교환하고 스택에 이전을 집어 넣으려고 시도하다 그것이 제대로 작동하는지 확실하지 않습니다.
if 문에서는 몇 가지 시도를했지만 아무 것도 작동하지 않아 문제가 발생합니다. 기본적으로 코드를 테스트 할 때 새 스트림을 열면 작동하고 새 파일을 읽기 시작하지만 오래된 ifstream으로 다시 팝하는 방법을 모르겠습니다. ou는 귀하의 의견에서 그것은 나에게 보인다
당신은 인수로 파일 이름을 갖는 재귀 함수를 사용할 수 있습니다. 함수에서 파일을 열고 행을 읽습니다. 파일 이름을 읽을 때 파일 이름으로 함수를 호출하십시오. – Shiping
거의 모든 일을 잘못하고 있습니다. 당신은'eof'를 루핑하고 있습니다. 범위를 벗어난 스트림의 주소를 스택으로 푸시합니다. 당신은 파일 스트림에서 옮겨온 재사용 중입니다 ... 프로그램이 무엇을해야하는지에 대해서는 매우 불분명하여 제안을하기가 어렵습니다. – Galik
당신 말이 맞아요, 나는 변화를 가져 왔고 제대로 작동하게하기 위해 물건을 삭제했습니다. 내 진짜 질문은 나중에 다시 팝업으로 스택에 파일 스트림을 저장하는 방법이 있는지 여부입니다. –