0

そのため、Dos コマンドを使用してフォルダーの名前を変更しようとするコードが少しあります。そう

system("rename C:\\Users\\me\\SecondDir NewDir);

したがって、これは SecondDir の名前を NewDir に変更しようとします。その場所には NewDir というフォルダーが既に存在するため、失敗するはずです。そして、そうです。次に、GetLastError を使用して返されたエラー コードを取得し、問題が想定どおりであることを確認します。ただし、ERROR_NO_MORE_FILES しか返されません。ERROR_ALREADY_EXISTS である、取得する必要があるエラーではありません。これはシステムコマンドの使用に関係していると思いますか?

編集:チェックしたところ、コマンドが成功したときに ERROR_NO_MORE_FILES が返されました。

4

1 に答える 1

3

GetLastError は、文書化されている場合を除き、意味のある値を返しません。これはそれらの 1 つではありません。取得している値は無関係であり、他の誰かを対象としています。

renameC からファイルの名前を変更するには、システムを使用して名前変更ユーティリティを呼び出すのではなく 、C ランタイム関数を使用する必要があります。

GetLastErrorを使用してスレッドの Last Error を設定することが文書化されている Win32 関数を呼び出した直後にのみ意味がありますSetLastError。C に相当するものはerrnoで、これは C 関数に適用されます。

このrename関数は、失敗すると -1 を返し、 を設定しますerrno

例: http://msdn.microsoft.com/en-us/library/zw5t957f(v=VS.80).aspx

于 2012-05-28T16:44:05.807 に答える