2009-10-12 4 views
4

저는 가장 기본적인 것들을하려고 노력하고 있습니다 .... C++로 파일을 작성했지만 파일이 작성되지 않았습니다. 어떤 오류도 발생하지 않습니다. 어쩌면 나는 명백한 무엇인가를 놓치고있는 것일 수있다. .. 또는, 무엇?C++로 파일을 쓸 수 없습니다

내 코드에 문제가 있다고 생각했지만 인터넷에서 찾은 샘플을 시도했지만 파일이 만들어지지 않았습니다.

코드입니다 :

ofstream myfile; 
myfile.open ("C:\\Users\\Thorgeir\\Documents\\test.txt"); 
myfile << "Writing this to a file.\n"; 
myfile.close(); 

내가 수동으로 미리 파일을 만들려고했지만, 전혀 업데이트되지 것.

Windows 7 64bit가 실행 중입니다. 그것은 파일 쓰기 작업이 완전히 금지되어 있으며 오류 메시지 나 예외가 표시되지 않는 것과 같습니다.

+0

나는 이것이 해결책이 아니라는 것을 알고있다. 그러나 이것은 나에게 전에 일어난 일이다. ** ofstream **을 ** fstream **로 대체하십시오. – AraK

+0

"Documents"라는 폴더가 있습니까? 내가 실수하지 않는다면, 일반적으로 "내 문서"라고 부릅니다 ... –

+1

@Jerry Vista 이후 "문서"로 변경되었습니다. – Corey

답변

2

당신은 쓰기 모드로 파일을 열 필요가 :

myfile.open ("C:\\Users\\Thorgeir\\Documents\\test.txt", ios::out); 

뿐만 아니라, 그 두 번째 인수에 대한 다른 옵션을보고해야합니다. 바이너리 데이터를 쓰려면 예를 들어 ios::binary이 필요합니다.

당신은 또한 개봉 후 스트림을 확인해야합니다

myfile.open(... 
if (myfile.is_open()) 
    ... 

업데이트 :

아라크 잘, 나는 그게 문제가 아니에요 있도록 ofstream은 기본적으로 쓰기 모드에 있음을 잊어 버렸습니다.

아마도 디렉토리에 쓰기/만들기 권한이 없습니까? Win7은 "deny all"이라는 특수 권한을 가진 많은 디렉토리를 기본값으로 사용합니다. 또는 해당 파일이 이미 있고 읽기 전용입니까?

+3

@Tim 좋은 지적이지만 std :: ios :: out은 ** ofstream **의 생성자에서 기본적으로 설정됩니다. – AraK

1

Windows Vista 및 7에서 UAC (사용자 계정 컨트롤) 및 UAC 가상화/데이터 리디렉션에 대해 읽은 적이 있습니까? 파일이 가상 저장소에 실제로있을 가능성이 있습니다.

User Account Control Data Redirection

귀하의 예제 출력 디렉토리는 사용자에, 그래서 나는이 문제가 될 것이라고 생각하지,하지만 그것은 당신이 찾고하지 않는 경우 매우 복잡 할 수 있습니다 언급 뭔가 가치가 가능성있어 그것!

희망이 도움이됩니다.

0

이 시도 :

if(! myfile) 
{ 
cerr << "You have failed to open the file\n"; 

//find the error code and look up what it means. 
} 
+0

어떻게 "오류 코드를 찾으십니까"? –

+0

@Tomalak : http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx –

+0

답변에 언급 된 내용은 Microsoft와 관련이 있습니다. C++에는 스트림 실패에 대한 "오류 코드"가 없습니다. 고장 모드. –

2

시작을 주위에 그 슬래시를 돌려.
심지어 Windows는 슬래시가 다른 방향으로 있음을 인식합니다.

ofstream myfile("C:/Users/Thorgeir/Documents/test.txt"); 

오류가있는 경우 테스트 수 :

if (!myfile) 
{ 
    std::cout << "Somthing failed while opening the file\n"; 
} 
else 
{ 
    myfile << "Writing this to a file.\n"; 
    myfile.close(); 
} 
  • 이 디렉토리가 존재하는지 확인이.
  • 파일이있는 오류를 포착해야
+1

대상 플랫폼에 고유하지 않은 경로 구분 기호를 사용하는 것이 좋습니다. 특히 아무것도 풀지 않으면? 이상한. –

+0

@Tomalak :별로. '\'는 이스케이프 문자이기 때문에 오류가 발생하기 쉽습니다 (컴파일 타임이 올바르게 사용되었는지 확인하지 않습니다). MS는 10 년 전에이 문제를 인식하고 '/'계획에 대한 지원을 추가하여 다른 OS와 호환되도록했습니다. 불행히도 그들은 이전 버전과의 호환성 문제에 봉착했습니다/ –

+0

'\\'에 문제가 없습니다. –

1

이 코드 (귀하) 당신이 쓰기 가능으로 작성하는 디렉토리를 확인

  • (귀하)가 쓸 수 있는지 확인 존재합니다. 대부분의 오류가 발생하면 사용 권한 것입니다. 당신이 읽기/당신이 파일을 만들 폴더에 쓸 수 있는지 확인

    #include "stdafx.h" 
    #include <fstream> 
    #include <iostream> 
    
    bool CheckStreamErrorBits(const std::ofstream& ofile); 
    
    int _tmain(int argc, _TCHAR* argv[]) { 
    std::ofstream ofile("c:\\test.txt"); 
    if(ofile.is_open()) { 
        CheckStreamErrorBits(ofile); 
        ofile << "this is a test" << std::endl; 
        if(CheckStreamErrorBits(ofile)) { 
        std::cout << "successfully wrote file" << std::endl; 
        } 
    }else { 
        CheckStreamErrorBits(ofile); 
        std::cerr << "failed to open file" << std::endl; 
    } 
    
    ofile.close(); 
    return 0; 
    } 
    
    //return true if stream is ok. return false if stream has error. 
    bool CheckStreamErrorBits(const std::ofstream& ofile) { 
    bool bError=false; 
    if(ofile.bad()) { 
        std::cerr << "error in file stream, the bad bit is set" << std::endl; 
        bError=true; 
    }else if(ofile.fail()) { 
        std::cerr << "error in file stream, the fail bit is set" << std::endl; 
        bError=true; 
    }else if(ofile.eof()) { 
        std::cerr << "error in file stream, the eof bit is set" << std::endl; 
        bError=true; 
    } 
    return !bError; 
    } 
    

    업데이트 :. 난 그냥 윈도우 7 Enterprize에서 내 코드를 테스트하고 처음 (비트가 설정 실패) 실패했습니다. 그런 다음 사용자 계정 컨트롤 (UAC)을 해제하고 다시 테스트하여 파일을 작성했습니다. 아마 당신이보고있는 것과 같은 문제 일 것입니다. UAC를 끄려면

    제어판 (작은 아이콘으로보기) | 사용자 계정 | 사용자 계정 컨트롤 설정을 변경하십시오. Never notify로 설정하고 OK 버튼을 클릭하십시오. 변경 사항이 적용 되려면 다시 시작해야합니다.

    UAC를 사용하는 방법을 궁금 해서요.

  • 0

    FileMon을 사용하여 프로세스에서 실패한 WriteFile 호출을 찾습니다.

    관련 문제