1

*nix と Windows で実行する必要があるプログラムがあります。\プログラムはファイルからファイルパスを取得するため、問題はvsの問題をどうするかです/

私の現在の考えは、私が使用しているシステムに応じて、間違ったものを正しいものに変換する正規表現を入れることです。これにより、どちらのタイプもどちらのシステムでも機能するようになります。現在、私には 2 つの問題があるという事実以外に、他に何か問題が見られる人はいますか?

(他のより良い解決策は大歓迎です)

編集: 主な問題は、その逆ではなく、Windows パスを UNIX で動作させることです。

4

7 に答える 7

5

/ は win32 でも完全にサポートされています。

この関連する質問も参照してください

于 2008-11-10T23:04:14.407 に答える
1

Windows は一般に \ または / のいずれかを受け入れます。そのため、ファイル名を完全に制御できる限り、/ を標準化することで問題が簡単になる場合があります。

于 2008-11-10T23:04:56.900 に答える
1

ファイル パスの問題をすべて処理する「ファイル マネージャ」クラスを作成することを検討しましたか? そうすれば、メール アプリケーションでデータ ファイルをロードするときに、次のように呼び出すことができます。

LoadApplicationData(FileManager.GetDataFilePath)

次に、ファイル マネージャーがその環境を検出し、適切なファイル パス オプションを返します。そうすれば、Win32 と Unix の場所の標準 (Program Files と /usr など) にも対応できます。

于 2008-11-10T23:06:37.583 に答える
1

ドライブ文字 (Unix ではアナログなし) と特別な「フォーク」 (MacOS X より前の用語 - 同様に Unix では一般的にアナログはありませんが、MacOS X にはそれらがあります - 驚き、驚き) を考慮すると、Win32 パスは複雑であることに注意してください。提供されます。気をつけて。

于 2008-11-10T23:45:04.743 に答える
0

あなたが使用している言語を言わなかったので、勝手に c/c++ と仮定します。 boostを使用する場合は、filesystem libraryがあります。もちろん、動的言語を使用している場合、FS 抽象化ライブラリもおそらく既にそこに存在します (たとえば、perl では、File::Spec は非常に標準的です)。

于 2008-11-11T00:23:24.667 に答える
0

入力用のパーサーを作成して、ディレクトリを表すノードのツリー構造を作成します。次に、ツリーをたどって必要な区切り文字を書き込んだり、ディレクトリが存在するかどうかの確認やメタファイルの書き込みなど、オプションでさまざまなことを行ったりして、「保存」できます。これは実際、自分のアプリケーションに役立つと今考えているものです:-)

于 2008-11-10T23:58:54.310 に答える
0

パスを読み取るファイルの種類を教えてくれませんでした。それらが構成ファイルであると仮定します。その場合、多くの方法がありますが、私見の正しい答えは、可能であればパスの操作を避けるようにプログラムを設計することです。ここに回答を投稿しました:関連するhttps://stackoverflow.com/a/40980510/2345997

方法:

  1. 構成ファイルから読み取る代わりに、ユーザーが問題のパスを指定できるようにするコマンド ライン オプションを追加します。
  2. ユーザーがベース パスを指定できるように、コマンド ライン オプションを追加します。構成ファイル内のパスは、この基本パスの下にあると解釈されます。
  3. 設定ファイルを 3 つに分割します。1 つのファイルにはクロス プラットフォーム構成があり、別のファイルには Windows のみの構成があり、最後のファイルには Linux のみの構成があります。その後、ユーザーは Windows と Linux の両方で正しいパスを指定できます。Windows では、プログラムはクロスプラットフォーム構成ファイルと Windows のみの構成ファイルを読み取ります。Linux では、クロスプラットフォーム ファイルと Linux のみの構成ファイルを読み取ります。
  4. 構成ファイルの解析に前処理を追加します。これにより、プログラムが実行されているOSに応じて、ユーザーがプログラムにファイル内の一部の行を無視させることができる1つの構成ファイルを作成できます。したがって、ユーザーはファイルへのパスを 2 回指定できます。Linux 用に 1 回、Windows 用に 1 回。
  5. ファイルが常に実行可能ファイルと同じディレクトリに配置されるように設計を変更します。その場合、ユーザーはファイルへのパスではなく、構成ファイルでファイル名のみを指定します。
  6. 「/」を「\」に切り替える単純な関数を使用します。次に、パスを Linux パスとして指定する必要があることをユーザーに文書化します。これにより、この変換が Windows に適用されます。
  7. このための独自のパス ミニ言語を作成し、それをユーザーに文書化します。例: "/" - ディレクトリ セパレータを指定します。{root} - ファイル システムのルートに展開します。{cwd} - 現在のディレクトリに展開します。{app} - アプリケーションへのパスに展開します。ユーザーは、両方のプラットフォームで {root}/myfiles/bob.txt のようなファイル パスを指定できます。
  8. 一部のパスは、両方のプラットフォームで機能します。例: ../my files/bill.txt のような相対パス。これらのパスでのみ動作するようにアプリケーションを制限します。この制限と、アプリケーションがユーザーへのパスを処理する方法を文書化してください。
于 2016-12-06T17:37:19.260 に答える