2009-05-09 5 views
11

사용자가 파일 이름뿐 아니라 파일이있는 전체 경로를 사용자에게 제공하기를 원합니다. 이 방법으로 파일을 열려면 어떻게해야합니까?파일을 C++에서 전체 경로로 열기

ifstream file; 
file.open("C:/Demo.txt", ios::in); 

이 작동하지 않습니다

는 다음과 같이 그것입니다.

+1

어떻게 당신은 작동하지 않습니다 알 수 있습니까? 확실히해야합니다. –

+1

그건/ –

+2

@DanielEarwicker 당신이 틀렸어, 맞아. 어쨌든 변환하고 싶다면, \\ not \\ not \ –

답변

10

fstream 클래스와 함께 전체 경로를 사용할 수 있습니다. folowing 코드는 C : 드라이브의 루트에있는 demo.txt 파일을 열려고 시도합니다. 입력 작업이므로 파일이 이미 존재해야합니다.

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

int main() { 
    ifstream ifs("c:/demo.txt");  // note no mode needed 
    if (! ifs.is_open()) {     
     cout <<" Failed to open" << endl; 
    } 
    else { 
     cout <<"Opened OK" << endl; 
    } 
} 

이 코드는 시스템에서 어떤 것을 생성합니까?

14

일반적으로 Windows에서는 백 슬래시 문자를 경로 구분 기호로 사용합니다. 그래서 : 백 슬래시 문자 자체가 이중 인용 된 문자열 안에 뭔가 특별한 의미하기 때문에

ifstream file; 
file.open("C:\\Demo.txt", ios::in); 

는 C++ 소스 코드를 작성하는 경우, 당신은 이중 백 슬래시를 사용해야합니다 있음을 유의하십시오. 위의 파일은 C:\Demo.txt입니다.

+0

으로 변환해야합니다. 알고있는 모든 Windows 컴파일러는 파일 이름에 슬래시를 사용할 수 있도록 지원하며, 이식성을 위해 백 슬래시보다 우선적으로 사용해야합니다 . –

+11

경로 정규화 ("\\? \"로 시작하는 경로)를 우회하지 않는 한 Win32는 경로에 대해 "\"또는 "/"를 지원합니다. http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx – Richard

+2

Neil을 참조하십시오. 이것은 컴파일러와 관련이 없습니다. Windows 쉘은 백 슬래시와 같은 방식으로 슬래시를 처리합니다. 이것은 신약 초기부터 일어난 일이다. – shoosh

2

코드가 작동하는 것 같습니다. @Iothar와 똑같이 생각합니다.

컴파일하는 데 필요한 헤더가 포함되어 있는지 확인하십시오. 컴파일 된 경우 해당 파일과 모든 파일, 이름 등이 일치하는지 확인하고 파일을 읽을 권한이 있는지 확인하십시오.

는 fopen을 함께 열 수 있는지 확인, 크로스 체크를 만들려면 ..이 동적 경로를 받고있는 사람들을 위해

FILE *f = fopen("C:/Demo.txt", "r"); 
if (f) 
    printf("fopen success\n"); 
1

... 예를 드래그 & 드롭 :

void removeCharsFromString(string &str, char* charsToRemove) { 
    for (unsigned int i = 0; i < strlen(charsToRemove); ++i) { 
     str.erase(remove(str.begin(), str.end(), charsToRemove[i]), str.end()); 
    } 
} 

string myAbsolutepath; //fill with your absolute path 
removeCharsFromString(myAbsolutepath, "\""); 
:

"C:\MyPath\MyFile.txt" 

빠르고 좋은 해결책은 문자열에서 문자를 제거하려면이 기능을 사용하는 것입니다

일부 주요 구조물 얻을 드래그 & 같은 큰 따옴표로 파일 하락

myAbsolutepath에는 이제 C:\MyPath\MyFile.txt

함수에는 다음 라이브러리가 필요합니다. <iostream><algorithm><cstring>.
이 기능은 this answer을 기반으로합니다.

작업 바이올린 :http://ideone.com/XOROjq