2010-01-24 2 views
4

파일을 생성하고 ofstream을 사용하여 파일을 작성하는 프로그램이 있습니다. 나중에 명령 줄 매개 변수를 구문 분석 할 수 있도록 프로그램이 필요합니다. 그러나 프로그램이 명령 줄 매개 변수를 전혀 포함하지 않더라도 컴파일 된 실행 파일에 파일을 끌어다 놓을 때 어떤 이유로 파일을 만들지 않습니다. 실행 파일이 정상적으로 실행되면 작동합니다. 그래서 저는 완전히 혼란스러워합니다. 다음은 출처입니다.콘솔 앱의 Windows 끌어서 놓기 문제

#include <iostream> 
#include <fstream> 
using namespace std; 

int main() 
{ 
    ofstream outfile; 
    outfile.open("test.txt"); 

    if(outfile.is_open()) 
    { 
     outfile << "Test"; 
     outfile.close(); 
    } 
    else cout << "Unable to open file"; 

    return 0; 
} 

아무도 아이디어가 있습니까? 어떤 도움을 주셔서 감사합니다.

+0

드래그하는 파일이 들어있는 폴더?Windows는 드래그 된 파일에 따라 프로그램의 작업 디렉토리를 설정합니다. –

+1

음, 파일 이름을 하드 코딩했습니다. argc 및 argv 인수를 취하여 코드에서 사용하도록 주 선언을 다시 작성하십시오. –

+0

Win2K에서 나에게 도움이되지 않으며 모든 것에 모든 권한을 가지고 있습니다. –

답변

1

명령 줄 인수를 전혀 사용하지 않습니다. main() 메서드를 다음과 같이 다시 코딩하십시오.

int main(int argc, char** argv) 
{ 
    if (argc != 2) 
    { 
    cout << "Usage: blah.exe file" << endl; 
    return 1; 
    } 
    ofstream outfile; 
    outfile.open(argv[1]); 
    if(outfile.is_open()) 
    { 
    outfile << "Test"; 
    outfile.close(); 
    } 
    else cout << "Unable to open file"; 
    return 0; 
} 

코드를 삭제할 때주의 깊게 파일 내용을 다시 작성하십시오.

+0

필자가 분명히 밝혀야 할 것은 필자가 드래그 한 파일에 쓰고 싶지 않습니다. 테스트 목적으로 드래그 한 파일과 관계가없는 새 파일을 만들고 싶습니다. – kaykun

+0

그러면 드래그 + 드롭을 사용할 수 없습니다. D + D를 어떻게 활용하고 싶은지는 매우 불분명합니다. 어쩌면 당신이 떨어 뜨린 파일의 디렉토리를 사용할 수 있습니까? –

+0

결국 나는 프로그램이 파일을 드래그하여 프로그램이 분석하고 드래그 된 파일을 기반으로 다른 텍스트 파일을 생성하게하고 다른 파일 이름을 생성하게합니다. 그러나 지금은이 간단한 문제를 해결하기 위해 노력하고 있습니다. 왜냐하면 어떤 파일이든 파일을 끌 때마다 파일을 만들지 않기 때문입니다. – kaykun

0

"test.txt"에 대한 경로를 지정하지 않았으므로 실행 파일의 현재 작업 디렉토리에서 해당 파일을 생성하려고 시도합니다. 이것은 프로그램을 정상적으로 실행할 때보 다 파일을 h 제하여 exe를 호출 할 때와 다를 수 있습니다.

"test.txt"에 전체 경로를 입력하고 해당 경로가 작동하는지 확인해보십시오.

편집 : , 당신은 단지 떠나는 EXE 이름을 없애기

다음 EXE의 전체 경로에 GetModuleFileName(NULL, ...), PathRemoveFileSpec을 사용 EXE 파일이 들어있는 경로로 출력 파일을 작성하려면 exe 경로 PathCombine exe ​​경로에 test.txt를 추가하십시오.

+0

같은 디렉토리에있는 모든 파일을 사용해 보았습니다. 여전히 작동하지 않습니다. –

+0

메인과 같은 사운드가 호출되지 않습니다. Id는 MainBreak의 맨 위에있는 DebugBreak()에 대한 호출을 추가하여 거기에 있는지도 확인합니다. –

+0

고마워,하지만 "C : \ text.txt"로 변경하면 "파일을 열 수 없습니다"라는 프로그램 오류가 발생합니다. – kaykun

0

경로를 지정하지 않았으므로 test.txt 파일이 기본 경로에 저장됩니다. 명령 프롬프트 (cmd.exe 실행)를 실행하면 명령 프롬프트에 기본 경로가 표시됩니다. 파일은이 디렉토리에 있어야합니다.

HOMEDRIVE & HOMEPATH 환경 변수를 편집하여 기본 경로를 변경할 수 있습니다.

또한 다른 답변에 유의해야합니다. argc/argv를 사용하여 출력 파일을 지정해야합니다.

+0

감사합니다. 실행 파일 (다른 컴퓨터마다 다를 수 있음)과 동일한 디렉토리 아래에 파일을 만들고 싶다면 드래그 한 파일과 다른 파일 이름으로도 처리 할 수 ​​있습니까? – kaykun

1

다음 코드는 영업 이익이 원하는 것을 수행합니다

#include <iostream> 
#include <fstream> 
using namespace std; 

int main (int argc, char ** argv) 
{ 
    cout << argv[1] << endl; 
    ofstream outfile; 
    outfile.open("testzzzzzzz.txt"); 

    if(outfile.is_open()) 
    { 
     outfile << "Testzzzzz"; 
     outfile.close(); 
     cout << "wrote file"<< endl; 
    } 
    else cout << "Unable to open file"; 

    string s; 
    getline(cin, s); 
    return 0; 
} 

은 드래그 앤 드롭을 할 수 있지만 열려있는 파일에서 삭제 된 파일 이름을 사용하지 않습니다. 아니 현재 디렉토리에, 확실히 - 당신이 그것을에서 파일을 삭제할 때, 당신은 불행하게도, 그 순간에 내가이 파일을 작성 아무 생각 이 없다

"파일을 썼다"라는 메시지를 얻을. 그냥 ...

편집을 검색 할 것 : 그것은 당신의 문서에를 생성하고 설정 디렉토리. 그래서 현재 디렉토리에 넣으려면 "./"을 명시 적으로 접두어로 사용해야합니다. 그러나 이것을 테스트하지는 마십시오 - 독자를위한 연습으로 남겨 둡니다 :-)

+0

고맙지 만 outfile.open ("./ test.txt"); 여전히 Documents and Settings 디렉토리에 파일을 만듭니다. 어떤 제안? – kaykun

+0

삭제 된 파일에서 경로를 추출하고이를 새 경로의 경로로 사용하면됩니다. 이것은 꽤 기괴한 행동 인 것처럼 보이지만, 나는 결코 Windows에 놀라지 않아야한다고 생각합니다. –

+0

@ Kaykun : 파일을 어디에 둘까요? –