2

C++ に慣れるために、古い大学の OS 課題をやり直しています。それは、独自のシェルをプログラムすることです。私はWindows.h存在を知らなかったあらゆる種類のものを使用しています。これまでのところ、私は良い進歩を遂げてきましたが、cd実装と から戻ってきた作業ディレクトリについて何かに気づきましたgetcwd

私のcdコマンドはいくつかのエラーチェックを行いますが、最終的にはchdir(path). 私がいるC:\としましょう。フォルダが存在しますFOLDERchdir("folder")後で呼び出すときに thenを使用すると、大文字と小文字が正しい string の代わりにgetcwd(dir, FILENAME_MAX)文字列が取得されます。すべてのフォルダの大文字と小文字が適切な作業ディレクトリを取得するにはどうすればよいですか?C:\folderC:\FOLDER

注:最初にシェルを起動してコマンドを実行すると(呼び出しからpwdのみ出力されます)、適切に大文字と小文字が区別されたパスが取得されます。作業ディレクトリの変更を開始するとすぐに、大文字と小文字は、実際のフォルダーの大文字と小文字ではなく、常に文字列と一致します。dirgetcwd

4

2 に答える 2

1

次の例のように、API 関数を使用してGetFullPathName、現在のディレクトリの適切な (大文字と小文字が正しい) パスを返すことができます。

TCHAR tchPath[MAX_PATH];
GetFullPathName(TEXT("."), MAX_PATH, tchPath, NULL);
于 2013-03-30T01:01:46.760 に答える
1

Windows コマンド プロンプトは を使用しているだけだと思いますGetLongPathName。これは、適切な大文字と小文字のパスを返します (ただし、ドライブ文字の大文字と小文字は変更されません)。

大文字のドライブ文字が必要な場合、GetShortPathName関数はドライバー文字を大文字にした短いパスを返します。次に、この短いパスを に渡すことができますGetLongPathName。これにより、適切に大文字と小文字が区別された長いパスに変わりますが、これは cmd が行うことではありません。

も使用できますがSHGetFileInfo、これは最も簡単な方法ではありません。

于 2013-03-29T21:06:24.037 に答える