2012-01-26 19 views
0

私はC++で相対パスを使ってテキストファイルを読むことを考えています。ディレクトリ構造は、source -> Resources -> Settings -> Video.txtです。ファイルの相対パスを使ってテキストファイルを読む

内容(注:これらはもちろん、テストに使用されている):

somes*** = 1 
mores*** = 2 
evenmores*** = 3 

私の研究によると、これは可能です。それでも、私はこれがまだ機能していないことがわかります。たとえば、私がデバッガをステップ実行したときに、char *line変数は、行単位のテキストファイル入力を受け取るために使用され、常に定数8の値になります。私の理解によれば、charポインタは、再割り当てすることができる文字の動的配列として機能することができます。

なぜファイルを読み取れないのですか? if (!videoSettings)を実行しようとすると、trueを返し、(私自身で作成された)エラーメッセージが表示されます。

コード

#ifdef WIN32 
    const char *filePath = "Resources\\Settings\\Video.txt"; 
#else 
    const char *filePath = "Resources/Settings/Video.txt"; 
#endif 

    std::ifstream videoSettings(filePath); 

    if (!videoSettings) 
    { 
     cout << "ERROR: Failed opening file " << filePath << ". Switching to configure mode." << endl; 

     //return false; 
    } 

    int count = 0; 

    char *line; 

    while(!videoSettings.eof()) 
    { 
     videoSettings >> line; 

     cout << "LOADING: " << *line << "; "; 

     count = sizeof(line)/sizeof(char); 

     cout << "VALUE: " << line[ count - 1 ]; 

     /* 

     for (int i = count; i > count; --i) 
     { 
      if (i == count - 4) 
      { 

      } 
     } 

     */ 
    } 

    delete line; 

答えて

2

あなたが最初のメモリを事前に割り当てる必要がある*うわーOK-あなただけのcharにテキストの文字列を読み取ることができません。第二

のchar *ポインタのサイズは一定である - しかし、それが指すデータのサイズは、私がのstd ::文字列getlineの呼び出しを使用することをお勧めし、すべての動的なメモリ割り当てを避ける

ない

だから、これは

std::ifstream in("file.txt"); 
std::string line; 
while(getline(in, line)) 
{ 
    std::cout << line << std::endl; 
} 

最後に、相対パスは

+0

[OK]を:-)あなたのコード例ではあなたの問題の最後をしているだろう、ありがとうございました。しかし、スピードと最適化を求めているなら、ダイナミックなメモリ割り当てとはるかに良い方法ですか? – zeboidlund

+0

技術的に固定された長さの配列は「より速いかもしれませんが、問題の終わりまであなたを開きます。第1レッスン - 遅くならない限り最適化しないでください。 2番目のダイナミックメモリの割り当ては、STLライブラリによってすでに処理されています。 STLはそれをやっているので、あなたはプログラマとしては決してできないあらゆる種類の最適化を行うことができます(つまり、コンパイラにそれをさせる) –

+0

ああ、3回目のレッスン:-)あなたのコードを最も簡単なバージョンに書く。スローチェンジする - それ以外の場合は、最小限の行で超シンプルで読みやすくする –

関連する問題