修复windows下无法发送中文名文件的问题

This commit is contained in:
huangjiechen 2024-08-08 17:10:29 +08:00
parent bf8e6bddb9
commit bf4a7eea7d

View File

@ -33,6 +33,10 @@
#include "user_info.h" #include "user_info.h"
#include "util.h" #include "util.h"
#ifdef _WIN32
#include <windows.h>
#endif
#define URL_SIZE 20 #define URL_SIZE 20
#define BASE_URL "tcp://0.0.0.0" #define BASE_URL "tcp://0.0.0.0"
#define G_BUF_SIZE (16 * 1024 * 1024) #define G_BUF_SIZE (16 * 1024 * 1024)
@ -252,12 +256,35 @@ bool func_send_img(char *path, char *receiver, uint8_t *out, size_t *len)
if ((path == NULL) || (receiver == NULL)) { if ((path == NULL) || (receiver == NULL)) {
LOG_ERROR("Empty path or receiver."); LOG_ERROR("Empty path or receiver.");
rsp.msg.status = -1; rsp.msg.status = -1;
} else if (!fs::exists(path)) {
LOG_ERROR("Path does not exists: {}", path);
rsp.msg.status = -2;
} else { } else {
SendImageMessage(receiver, path); bool fileExist = false;
rsp.msg.status = 0; #ifdef _WIN32
// 将 char* 路径转换为 wide-char 格式
std::wstring wpath = String2Wstring(path);
// 使用 GetFileAttributesW() 检查文件是否存在
DWORD attributes = GetFileAttributesW(wpath.c_str());
if (attributes == INVALID_FILE_ATTRIBUTES) {
LOG_ERROR("Path does not exist: {}", path);
rsp.msg.status = -2;
} else {
fileExist = true;
}
#else
// On Linux and other systems
std::string spath(path);
if (!fs::exists(spath)) {
LOG_ERROR("Path does not exist: {}", path);
rsp.msg.status = -2;
return false;
} else {
fileExist = true;
}
#endif
if(fileExist) {
SendImageMessage(receiver, path);
rsp.msg.status = 0;
}
} }
pb_ostream_t stream = pb_ostream_from_buffer(out, *len); pb_ostream_t stream = pb_ostream_from_buffer(out, *len);
@ -279,12 +306,38 @@ bool func_send_file(char *path, char *receiver, uint8_t *out, size_t *len)
if ((path == NULL) || (receiver == NULL)) { if ((path == NULL) || (receiver == NULL)) {
LOG_ERROR("Empty path or receiver."); LOG_ERROR("Empty path or receiver.");
rsp.msg.status = -1; rsp.msg.status = -1;
} else if (!fs::exists(path)) { }
LOG_ERROR("Path does not exists: {}", path); else {
rsp.msg.status = -2; bool fileExist = false;
} else { #ifdef _WIN32
SendImageMessage(receiver, path); // 将 char* 路径转换为 wide-char 格式
rsp.msg.status = 0; std::wstring wpath = String2Wstring(path);
// 使用 GetFileAttributesW() 检查文件是否存在
DWORD attributes = GetFileAttributesW(wpath.c_str());
if (attributes == INVALID_FILE_ATTRIBUTES) {
LOG_ERROR("Path does not exist: {}", path);
rsp.msg.status = -2;
}
else {
fileExist = true;
}
#else
// On Linux and other systems
std::string spath(path);
if (!fs::exists(spath)) {
LOG_ERROR("Path does not exist: {}", path);
rsp.msg.status = -2;
return false;
}
else {
fileExist = true;
}
#endif
if (fileExist) {
SendImageMessage(receiver, path);
rsp.msg.status = 0;
}
} }
pb_ostream_t stream = pb_ostream_from_buffer(out, *len); pb_ostream_t stream = pb_ostream_from_buffer(out, *len);