2017-07-06 11 views
0

これは簡単な質問だと思いますが、どうやってそれを行うのか分かりません。私はWindows上でコンパイルして実行しているC++プロジェクトを持っていますが、私が使用しているNiTE2ライブラリの問題が発生しています。 NiTE2がセットアップに必要な特定の機能を呼び出すと、 "./NiTE2/s.dat"にある "s.dat"ファイルが検索されます。問題は、Visual Studio環境で "。\ NiTE2/s.dat"というパスを検索しようとするときです。それはスラッシュをミックスするタイプミスではありません。プログラムが必要なファイルを見つけられないことがあります。しかし私がGit Bashの下で自分のプログラムを実行すると、うまく実行されます。Visual Studioのファイル名

Git Bashを使うと、デバッグが非常に難しくなります.Windowsのデフォルトのバックスラッシュの代わりにスラッシュを使用するようにVisual Studioのランタイム環境を取得することは可能ですか? "s.dat"がどこにあるかを定義するパスは、私が解決できないように編集できない独自のコードに埋め込まれています。

サイドノート:とにかく役立つ場合は、Windows 10を実行しています。私はVSCodeを使ってbashデバッグをしようとしていますが、現時点ではうまくいっていません。

+2

スラッシュを混ぜることは、Windows上でうまく動作します。ファイルを見つけることができないのは当然のことですが、デフォルトの作業ディレクトリは可能な限り最悪のグローバル変数です。相対パスを使用しないで、プログラムのインストールディレクトリから完全なパスを作成して、どこに置いても動作し、設定にまったく依存しないようにしてください。 –

+0

@HansPassant私は、相対的なパス設定は私のコードで絶対パスを使用するのは難しいアイデアだと私は同意しますが、私が言及したように、コードのその部分を変更することはできません。これはNiTE2ライブラリの中に埋め込まれています。最終的にコンパイルされたバージョンしかありません。ビジュアルスタジオ環境でファイルを見つけられないという不満があるのに、git bashとコマンドプロンプトでうまくいく理由は何ですか? – Wired365

+0

さて、獣に餌を与え、食べたいものを与えてください。明示的にコード内の作業ディレクトリを設定して、常に正しいことを確認します。 SetCurrentDirectory()または '_chdir()'を使用してください。 –

答えて

0

私はビジュアルスタジオが予期しない作業ディレクトリを選択していると思っています。作業ディレクトリを編集するとうまくいくはずです。

この問題を解決するために、私はシステム内部procmonツールを使用します。アプリケーションを実行すると、試行されたファイルの完全なパスが表示されます。

Visual Studioは、奇妙な作業ディレクトリ(ソースの場所)でアプリケーションを起動します。これは、デバッガで実行しているときにファイルが失われる大きな原因となります。

ソリューションエクスプローラの.exeの場所に移動し、プロパティを編集するために右クリックし、「デバッグ」構成プロパティを選択して、デバッガの開始ディレクトリを変更できます。

ここでは、プログラムにテキストとして送信されるコマンド引数とワーキングディレクトリを設定できます。

Windowsには2つのパスパーサーがあります。ネイティブのNTパスパーサーは/を受け入れませんが、有効にすることができるDOSパーサがあります。

  • は相対的な検索c:\program files\myApp\..\yourapp\prog.exe
  • があり
  • 連続で '\' または '//' についての世話未許可
  • '\' または '/' についての世話なし - :DOSパーサーがによって異なりますファイルの最後にスペースに関する奇妙な規則があります。 (DOSパーサーはそのようなものを開くことはできません)。

DOSパーサーは、 '\?'でファイルを開くときに無効にすることができます。パスの先頭に追加され、関数のユニコードバリアントを使用します。

wfopen(L"\\\\?\\c:\\program files\\yourapp\\prog.exe", L"rb"); 

したがって、通常の操作では、DOSパーサが無効になっている場合を除いて、 '\'と '/'は同等です。

+0

これは私が探していたものです。私はそれが私が行方不明だったシンプルなものであることを知っていましたが、私はVisual Studioで.exeファイルの場所を使用する方法を知らなかった。ファイルパス解析をどのように処理するのかよく書かれているので、感謝します。 – Wired365

関連する問題