開こうとするファイル名が指定されているCode :: BlocksのC++宿題プロジェクトで作業しています最初のコマンドライン引数で指定します。私が開こうとしているファイルは、InputFile1.txtというタイトルです。C++ Code :: Blocksでフルパスでファイルを開くことができますが、相対パスではなくコマンドライン引数で開くことができます
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <unistd.h>
using std::cout;
using std::ifstream;
using std::ofstream;
using std::cerr;
int main(int argc, char *argv[])
{
ifstream inputFile;
puts(getcwd(0,1234));
inputFile.open(argv[1]);
if (inputFile.is_open())
{
cerr << "Couldn't open file " << argv[1];
return(EXIT_FAILURE);
}
cout << "\nThe file to search is: " << argv[1];
return(EXIT_SUCCESS);
}
エラーメッセージ "ファイルを開くことができませんでした。InputFile1.txt"が表示されます。しかし、InputFile1.txtへの完全なパスを入力すると、ファイルが正常に開き、メッセージの出力が下部に表示されます。次のトラブルシューティング手順を実行しました。
- 同じIDEで実行されているCプログラムでファイルを正常に開いた。
- ファイル名のスペルが正しくあり、最初のコマンドライン引数であることを確認しました。また、geditでファイルを開いた。
- puts(getcwd(0,1234)ステートメントによる現在の作業ディレクトリの出力と一致するファイルパスを確認したもの)
- コードの検証::プロジェクト実行の作業ディレクトリをブロックする(プロジェクト>プロパティ>ビルドターゲット - )InputFile1.txtが作業ディレクトリにあったことがステップ3の出力にマッチした、と。
- は、ディレクトリ1つのレベルアップに作業ディレクトリを変更し、ディレクトリにInputFile1.txtをコピーした。もう一度、フルパスでの成功が、ないようARGV [1]
私の分析:。
- 私はそれがファイルのアクセス許可ではないと思います。そうでなければ、geditまたは完全なパスで開くことはできません。
- 私はそれがExecution作業ディレクトリであるとは思わないか、Code :: Blocks内で実行されるCプログラムのために開かれていないと思います。
- 私のC++コードやCode :: Blocksの設定と関係があります。 /ヘルプ
任意の洞察力をいただければ幸いです。
あなたのIDEはあなたのアプリケーションと同じ作業ディレクトリを持っておらず、相対パスでアプリケーションを起動します。 'debug32 \ my_app.exe';したがって、任意のファイルへの相対パスは異なる場合があります(相対パスは、アプリケーションディレクトリではなく作業ディレクトリとの相対パスです)。コマンドラインから(IDEの外で)実行するとアプリケーションが正しく動作しますか?また、 'argv [0]'を表示してアプリケーションの呼び出し方法を調べてみてください。 –
私のトラブルシューティングでは、Code :: Blocks Project Bin&Objディレクトリに関するスタックオーバーフローのポストを読んで、それぞれのディレクトリにコピーを移動してファイルを開くことで解決策を強制しようとしました。失敗。 – Crispy
リチャード - あなたの助けをありがとう!次回は、Code :: Blocksでファイルを開く際に問題があることを念頭においてください。 – Crispy