gpt4 book ai didi

c++ - 检查文件是否存在的 Visual C++ DLL

转载 作者:太空宇宙 更新时间:2023-11-04 14:08:20 34 4
gpt4 key购买 nike

我制作了这个 dll 文件,它试图检查文件是否存在。但是即使我手动创建文件,我的 dll 仍然找不到它。

我的 dll 检索正在运行的程序的进程 ID 并查找以 pid 命名的文件。

谁能告诉我我错过了什么:(

代码:

#include <Windows.h>
#include <winbase.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

using namespace std;

int clientpid = GetCurrentProcessId();
ifstream clientfile;
string clientpids, clientfilepath;

VOID LoadDLL() {
AllocConsole();
freopen("CONOUT$", "w", stdout);
std::cout << "Debug Start" << std::endl;

std::ostringstream ostr;
ostr << clientpid;
clientpids = ostr.str();
ostr.str("");

TCHAR tempcvar[MAX_PATH];
GetSystemDirectory(tempcvar, MAX_PATH);
ostr << tempcvar << "\\" << clientpids << ".nfo" << std::endl;
clientfilepath = ostr.str();
//clientfile.c_str()
ostr.str("");

std::cout << "Start search for: " << clientfilepath << std::endl;

FOREVER {
clientfile.open(clientfilepath,ios::in);
if(clientfile.good()) {
std::cout << "Exists!" << std::endl;
}

Sleep(10);
};
}

最佳答案

假设您正在使用 UNICODE

我认为问题在于以下几行:
ostr << tempcvar << "\\" << clientpids << ".nfo" << std::endl;
tempcvar 是一个 tchar,也许你正在使用 unicode,所以这意味着 tempcvar 是一个 widechar。

您插入 tempcvar 的结果在 ostr不是您所期望的(您也将多字节与 widechar 混合)。此问题的解决方案是转换 tempcvar转换为多字节字符串(const char*char* ...)

根据你的代码看这个例子(看tchar到multibyte char的转换)

VOID LoadDLL() {

AllocConsole();
freopen("CONOUT$", "w", stdout);
std::cout << "Debug Start" << std::endl;
std::ostringstream ostr;
ostr << clientpid;
clientpids = ostr.str();
ostr.str("");

TCHAR tempcvar[MAX_PATH];
GetSystemDirectory(tempcvar, MAX_PATH);

// Convertion between tchar in unicode (wide char) and multibyte
wchar_t * tempcvar_widechar = (wchar_t*)tempcvar;
char* to_convert;
int bytes_to_store = WideCharToMultiByte(CP_ACP,
0,
tempcvar_widechar,
-1,NULL,0,NULL,NULL);
to_convert = new char[bytes_to_store];

WideCharToMultiByte(CP_ACP,
0,
tempcvar_widechar,
-1,to_convert,bytes_to_store,NULL,NULL);

// Using char* to_convert that is the tempcvar converted to multibyte
ostr << to_convert << "\\" << clientpids << ".nfo" << std::endl;
clientfilepath = ostr.str();
//clientfile.c_str()
ostr.str("");

std::cout << "Start search for: " << clientfilepath << std::endl;

FOREVER {
clientfile.open(clientfilepath,ios::in);
if(clientfile.good()) {
std::cout << "Exists!" << std::endl;
}

Sleep(10);
};

}

如果此示例对您不起作用,您可以搜索有关宽字符串到多字节字符串转换的更多信息。
检查您是否正在使用 Unicode,如果是,则可能是您的问题。

如果您不使用 unicode,则您的代码中的问题可能是打开文件。

希望对您有所帮助!

关于c++ - 检查文件是否存在的 Visual C++ DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15977577/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com