如果用户名包含德语变音符号,则无法查询用户APPDATA文件夹

时间:2015-10-06 09:23:14

标签: c windows shell mingw codepages

我正在尝试检查用户APPDATA文件夹中是否存在文件夹。当从 cmd cygwin shell调用时,以下程序可以正常工作,但如果envrionment变量 APPDATA ,则从 mingw shell中失败strong>的值为 C:\ User \LieschenMüller

#include <stdlib.h>
#include <stdio.h>
#include <windows.h>

int main (int argc, char ** argv) {
  const char *   appdata;
  DWORD          result;

  if (NULL != (appdata = getenv ("APPDATA"))) {
     result = GetFileAttributes (appdata);

     if (INVALID_FILE_ATTRIBUTES == result) {
        fprintf (stderr, "<%s> = INVALID_FILE_ATTRIBUTES\n", appdata);
         result = 1;
      }
      else if (!(FILE_ATTRIBUTE_DIRECTORY & result)) {
         fprintf (stderr, "<%s> = ! FILE_ATTRIBUTE_DIRECTORY\n", appdata);
         result = 1;
      }
      else {
         fprintf (stderr, "<%s> OK\n", appdata);
         result = 0;
      }
   }
   else {
      fprintf (stderr, "Failed to lookup APPDATA environment variable\n");  
      result = 1;
   }

   return (int) result;
}

cmd cygwin 内,ü位置的字符为 0xFC ,但在内mingw 它是 0x81 (0xFFFFFF81)。

我还尝试使用以下代码但没有成功。

SHGetSpecialFolderPath (NULL, appdata, CSIDL_APPDATA, FALSE)

调用返回 FALSE GetLastError()返回错误代码 3 ERROR_PATH_NOT_FOUND )。

mingw shell中运行给定程序时,是否有一些我不想设置的内容?

0 个答案:

没有答案