2014-04-21 1 views
0

저는 C++ 프로그램을 끝내기 위해 어떤 문제가있는 것 같고 도움이 필요합니다.새로운 텍스트 파일을 만드는 데 문제가 있습니다. C++

내 프로그램이 끝나면 텍스트 파일에도 출력해야합니다. 나는 fstream과 ofstream을 사용하여 여러 가지 방법을 시도해 봤지만 파일이 존재하는지 확인했다.

Heres 여기서 Im은 지금까지 있었지만 "output.txt"가 존재하면 그 파일에서 whats가 삭제되고 아무것도 작성되지 않지만 크래시는 발생하지 않습니다.

... 
ofstream output; 
int fileIncrement = 0; 
bool validFile = false; 

cout << "Saving File.." << endl; 
output.open("output.txt"); 

while (!validFile) 
{ 
    if (output.good()) // does exist 
    { 
     fileIncrement++; 
     output.open(to_string(fileIncrement) + "output.txt"); 
    } 
    else 
    { 
     myVectors.outputVectors(output); 
     validFile = true; 
    } 
} 

감사합니다.

+0

첫 번째 조건 인'if (output.good())'는 항상 true이고'validFile'는'true'로 설정되지 않기 때문에 출력 파일을 열면 ('good'가 true를 반환합니다. –

+0

그래도 끝납니다. 그리고 나는 output.open (to_string (fileIncrement + "output.txt");)이 열린 파일을 변경하여 새로운 파일을 만들 것이라고 생각했습니다 ... ... 사실이면서도 끝나기 때문에 잠시 멈추지 않을 것입니다. 루프 – Harvey

+0

디버거를 시작하고 코드를 단계별로 수행하십시오. –

답변

1

output.good()는 파일의 접근 가능성을 확인하기 만합니다. 아직 없으면 만들어 질 것입니다. 따라서 Captian Oblivious는 validFile이 결코 true로 설정되지 않는다고 설명합니다. 함수가 끝나는 이유는 실제로 두 번째 파일 (see here)을 열기 전에 첫 번째 파일을 닫지 않았기 때문입니다. 그 작업은 failbit 설정으로 실패합니다. 그래서 새 파일이 만들어지지 않고 이전 파일을 덮어 씁니다.

저는 C++에서 파일의 (사전) 존재를 확인하는 훌륭한 표준 방법을 모르지만, this은 아마도 원하는 것처럼 들립니다.

관련 문제