2009-05-09 22 views
11

ファイル名だけでなく、ファイルが存在する完全なパスをユーザーに与えたいと思っています。この方法でファイルを開くにはどうすればよいですか?これは動作していないようファイルをC++でフルパスで開く

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

が、それはこのようなものです。

+1

は、どのようにそれが動作しません知っているのですか?それは確かにすべきです。 –

+1

あなたは間違っているのですか?\ –

+2

@DanielEarwicker、そうです。とにかく変換​​したいのであれば、\\ not \\ not \ –

答えて

10

fstreamクラスでフルパスを使用できます。フォローコードは、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シェルは、バックスラッシュと同じ方法でフォワードスラッシュを処理します。これは、NTの初期の時代からそうであった。 – shoosh

2

コードは私にとってうまくいくようです。 @イータールと同じと思います。

コンパイルするために必要なヘッダーが含まれているかどうかを確認してください。コンパイルされている場合は、そのようなファイルがあるかどうか、すべて、名前などが一致するかどうかを確認し、ファイルを読む権利があるかどうかを確認します。例えば...、クロスチェックをするあなたは、関数fopenでそれを開くことができれば... dynamiclyパスを取得している人のために

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

を確認するには

ドラッグ&ドロップ:

いくつかの主要な構成は、ドラッグ&のような二重引用符でファイルをドロップ取得:

"C:\MyPath\MyFile.txt" 

クイックと素敵な解決策は、文字列から文字を削除するには、この機能を使用することです:

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, "\""); 

myAbsolutepathには、現在、C:\MyPath\MyFile.txt

この関数には、次のライブラリが必要です。<iostream><algorithm><cstring>
この機能はthis answerに基づいています。

ワーキングフィドル:http://ideone.com/XOROjq

関連する問題