wchar_t* argv[] 数组赋值

这段代码演示了如何将多字节字符字符串转换为宽字符字符串,用于处理Windows系统的命令行参数。首先,它获取路径和参数的宽字符表示,然后初始化一个宽字符数组,最后通过`CONSUME_NEXT_ARG`函数获取并打印应用名称和操作。

    //获取路径
    const char* CStr = "C:\\Users\\MFGYF-LiPan\\Desktop\\文件属性\\123_A.par";
    size_t len = strlen(CStr) + 1;
    size_t converted = 0;
    wchar_t* WStr;
    WStr = (wchar_t*)malloc(len * sizeof(wchar_t));
    mbstowcs_s(&converted, WStr, len, CStr, _TRUNCATE);
    //获取参数
    char argu[] = "-get";
    size_t len2 = strlen(argu) + 1;
    size_t converted2 = 0;
    wchar_t* WStr2;
    WStr2 = (wchar_t*)malloc(len2 * sizeof(wchar_t));
    mbstowcs_s(&converted, WStr2, len2, argu, _TRUNCATE);
    //初始化路径和参数
    wchar_t** wArgs = new wchar_t* [2] {WStr, WStr2};
    argc =2;
    PCWSTR pszAppName = CONSUME_NEXT_ARG(wArgs, argc);
    PCWSTR pszOp = CONSUME_NEXT_ARG(wArgs, argc);
    wprintf(pszAppName);
    wprintf(L"\n");
    wprintf(&pszOp[0]);
    wprintf(L"\n");
    system("pause");
    return 0;

#include <windows.h> #include <stdio.h> #include <tchar.h> #define MAX_BUFFER_SIZE 65536 // 文件变化类型描述 const TCHAR* GetActionDescription(DWORD action) { switch (action) { case FILE_ACTION_ADDED: return _T("添加"); case FILE_ACTION_REMOVED: return _T("删除"); case FILE_ACTION_MODIFIED: return _T("修改"); case FILE_ACTION_RENAMED_OLD_NAME: return _T("重命名(旧名)"); case FILE_ACTION_RENAMED_NEW_NAME: return _T("重命名(新名)"); default: return _T("未知操作"); } } int _tmain(int argc, TCHAR* argv[]) { if (argc != 2) { _tprintf(_T("用法: %s <监控目录>\n"), argv[0]); return 1; } // 1. 打开要监控的目录 HANDLE hDir = CreateFile( argv[1], // 监控目录路径 FILE_LIST_DIRECTORY, // 访问权限:列出目录内容 FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, // 共享模式 NULL, // 安全属性 OPEN_EXISTING, // 打开现有目录 FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, // 目录监控专用标志 NULL ); if (hDir == INVALID_HANDLE_VALUE) { _tprintf(_T("无法打开目录。错误: %d\n"), GetLastError()); return 1; } BYTE buffer[MAX_BUFFER_SIZE]; DWORD bytesReturned; FILE_NOTIFY_INFORMATION* pNotifyInfo; TCHAR oldName[MAX_PATH] = {0}; // 用于存储重命名的旧文件名 _tprintf(_T("开始监控目录: %s (按Ctrl+C退出)\n\n"), argv[1]); // 2. 持续监控目录变化 while (TRUE) { ZeroMemory(buffer, sizeof(buffer)); // 3. 读取目录变化 BOOL success = ReadDirectoryChangesW( hDir, // 目录句柄 buffer, // 接收变化的缓冲区 sizeof(buffer), // 缓冲区大小 TRUE, // 监控子目录 FILE_NOTIFY_CHANGE_FILE_NAME | // 监控文件名更改 FILE_NOTIFY_CHANGE_DIR_NAME | // 监控目录名更改 FILE_NOTIFY_CHANGE_ATTRIBUTES | // 监控属性更改 FILE_NOTIFY_CHANGE_SIZE | // 监控文件大小更改 FILE_NOTIFY_CHANGE_LAST_WRITE, // 监控最后写入时间更改 &bytesReturned, // 返回的字节数 NULL, // 同步操作,无需OVERLAPPED NULL // 无需完成例程 ); if (!success) { _tprintf(_T("ReadDirectoryChangesW失败。错误: %d\n"), GetLastError()); break; } // 4. 处理目录变化通知 DWORD offset = 0; do { pNotifyInfo = (FILE_NOTIFY_INFORMATION*)(buffer + offset); // 将宽字符文件名转换为以null结尾的字符串 TCHAR fileName[MAX_PATH]; memcpy(fileName, pNotifyInfo->FileName, pNotifyInfo->FileNameLength); fileName[pNotifyInfo->FileNameLength / sizeof(WCHAR)] = _T('\0'); // 处理重命名事件的特殊逻辑 if (pNotifyInfo->Action == FILE_ACTION_RENAMED_OLD_NAME) { _tcscpy_s(oldName, MAX_PATH, fileName); } else if (pNotifyInfo->Action == FILE_ACTION_RENAMED_NEW_NAME) { _tprintf(_T("[事件] %s: %s -> %s\n"), GetActionDescription(pNotifyInfo->Action), oldName, fileName); } else { _tprintf(_T("[事件] %s: %s\n"), GetActionDescription(pNotifyInfo->Action), fileName); } // 移动到下一个通知 offset += pNotifyInfo->NextEntryOffset; } while (pNotifyInfo->NextEntryOffset != 0); // 直到没有下一个通知 } CloseHandle(hDir); return 0; } 代码原理和执行流程
最新发布
11-12
CString strDatas = “https://compliance.his.huawei.com/SpecialManagement/external/product/character/submit“; CString strAPIURL = strDatas; CURL *curl; CString strHtml; CString strInfo; strInfo.Format(L"{"url":"%s","jsonStr":%s}“, strAPIURL, Body); curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); USES_CONVERSION;//声明标识符 //char *c_url = T2A(strAPIURL); curl_slist *head = NULL; head = curl_slist_append(head, “Content-Type: application/json”); CURLcode res; curl_easy_setopt(curl, CURLOPT_URL, “http://10.11.1.10:1024/user/postRequest”);//地址 curl_easy_setopt(curl, CURLOPT_HTTPHEADER, head); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); //设置请求的超时时间 curl_easy_setopt(curl, CURLOPT_POST, 1L);//POST请求 string jsonInfo = ConvertCStringToUTF8(strInfo); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonInfo.c_str()); // 要发送的数据 std::string strdata; curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);//设置回调函数,用于处理返回的数据 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &strdata); csReturn = “”; res = curl_easy_perform(curl); CString m_ErrMsg = L"获取磐石数据失败,请联系管理员”; if (res != CURLE_OK) { errMsg = m_ErrMsg; return FALSE; } curl_easy_cleanup(curl); strHtml = “”; strHtml = csReturn; char json_str = (char)(LPCTSTR)strHtml; cJSON *root = cJSON_Parse(strdata.c_str()); if (root == NULL) { errMsg = m_ErrMsg; return FALSE; } cJSON *code = cJSON_GetObjectItem(root, "code"); if (code == NULL) { errMsg = m_ErrMsg; return FALSE; } cJSON *data1 = cJSON_GetObjectItem(root, "data"); if (data1 == NULL) { errMsg = m_ErrMsg; return FALSE; } cJSON *analysisMsg = cJSON_GetObjectItem(root, "analysisMsg"); if (analysisMsg == NULL) { errMsg = m_ErrMsg; return FALSE; } cJSON *msg = cJSON_GetObjectItem(root, "msg"); if (msg == NULL) { errMsg = m_ErrMsg; return FALSE; } CString strCode = JsonTOCString(code); Sename = JsonTOCString(data1);//评审页面 CString stranalysisMsg = JsonTOCString(analysisMsg); CString strMsg = JsonTOCString(msg); if (csReturn.Find(L"服务调用成功") >= 0 || strCode.Find(L"200") >= 0) { return TRUE; } //{"code":99999,"msg":"特性状态非编制中、已驳回、评审不通过,不允许发起评审!", else if (strCode.Find(L"99999") >= 0) { errMsg = strMsg; return FALSE; } else { return FALSE; }其中CString SpecialCharacteristic::JsonTOCString(cJSON * json) { if (!json) { return L"“; } if (json->type == cJSON_Number) { if (json->valueint == json->valuedouble) //int { int ival = json->valueint; CString strNumber; strNumber.Format(_T(”%d"), ival); return strNumber; } else//double { double dval = json->valuedouble; CString strNumber; strNumber.Format(_T(“%.2f”), dval); return strNumber; } } else if (json->type == cJSON_String) { string value = json->valuestring; CString str; CStringW unicodeStr; int len = MultiByteToWideChar(CP_UTF8, 0, value.c_str(), -1, NULL, 0); if (len > 0) { LPWSTR buf = unicodeStr.GetBuffer(len); MultiByteToWideChar(CP_UTF8, 0, value.c_str(), -1, buf, len); str.Format(L"%ls", buf); unicodeStr.ReleaseBuffer(); } return str; /////////////////////////////////////////////// //std::string value = json->valuestring; //int len = MultiByteToWideChar(CP_UTF8, 0, value.c_str(), -1, NULL, 0); //wchar_t* wstr = new wchar_t[len]; //MultiByteToWideChar(CP_UTF8, 0, value.c_str(), -1, wstr, len); //int len2 = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL); //char* str = new char[len2]; //WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len2, NULL, NULL); //CString cstr(str);//特殊符号会给改成其它 //delete[] wstr; //delete[] str; //////////////////////////////////////////////// /string value = json->valuestring; LPCWSTR unicodeStr1 = CA2T(value.c_str(), CP_UTF8);//字段过长会乱码 CString cstr(unicodeStr1);/ } else if (json->type == cJSON_Array) { CString strResult; for (int i = 0; i < cJSON_GetArraySize(json); i++) { cJSON* item = cJSON_GetArrayItem(json, i); string value = cJSON_Print(item); CString str; CStringW unicodeStr; int len = MultiByteToWideChar(CP_UTF8, 0, value.c_str(), -1, NULL, 0); if (len > 0) { LPWSTR buf = unicodeStr.GetBuffer(len); MultiByteToWideChar(CP_UTF8, 0, value.c_str(), -1, buf, len); str.Format(L"%ls", buf); unicodeStr.ReleaseBuffer(); } str.Replace(L""“, L”“); strResult += str; if (i != cJSON_GetArraySize(json) - 1) { strResult += L”,“; } } return strResult; } else if (json->type == cJSON_False) { return L"false”; } else if (json->type == cJSON_True) { return L"true"; } else { return L""; } }其中static std::string ConvertCStringToUTF8(CString strValue) { std::wstring wbuffer; wbuffer.assign(strValue.GetString(), strValue.GetLength()); /* 获取转换后长度 */ int length = WideCharToMultiByte(CP_UTF8, 0, wbuffer.data(), wbuffer.size(), NULL, 0, NULL, NULL); /* 获取转换后内容 */ std::string buffer; buffer.resize(length); WideCharToMultiByte(CP_UTF8, 0, strValue, -1, (LPSTR)(buffer.data()), length, NULL, NULL); return(buffer); }转换为qt程序
10-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CAD GIS开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值