私は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;
[OK]を:-)あなたのコード例ではあなたの問題の最後をしているだろう、ありがとうございました。しかし、スピードと最適化を求めているなら、ダイナミックなメモリ割り当てとはるかに良い方法ですか? – zeboidlund
技術的に固定された長さの配列は「より速いかもしれませんが、問題の終わりまであなたを開きます。第1レッスン - 遅くならない限り最適化しないでください。 2番目のダイナミックメモリの割り当ては、STLライブラリによってすでに処理されています。 STLはそれをやっているので、あなたはプログラマとしては決してできないあらゆる種類の最適化を行うことができます(つまり、コンパイラにそれをさせる) –
ああ、3回目のレッスン:-)あなたのコードを最も簡単なバージョンに書く。スローチェンジする - それ以外の場合は、最小限の行で超シンプルで読みやすくする –