我想删除用户使用函数DeleteFile()
库登录的文件我没有得到......
我试过这个:
DeleteFile ("c: \ \ users \ \% username% \ \ file");
还尝试像这样捕获用户名:
TCHAR name [UNLEN + 1];
UNLEN DWORD size = + 1;
GetUserName (name, & size);
但不知道要放变量name
函数DeleteFile()
。
获取用户配置文件目录的唯一干净方法是将SHGetSpecialFolderPath API 与适当的CSIDL代码(在您的情况下为 CSIDL_PROFILE)一起使用。这是一个简短的(未经测试的)示例:
char the_profile_path[MAX_PATH];
if (SHGetSpecialFolderPath(NULL, the_profile_path, CSIDL_PROFILE, FALSE) == FALSE)
{
cerr << "Could not find profile path!" << endl;
return;
}
std::ostringstream the_file;
buffer << the_profile_path << "\\file";
if (DeleteFile(buffer.c_str()) == TRUE)
{
cout << buffer << " deleted" << endl;
}
else
{
cout << buffer << " could not be deleted, LastError=" << GetLastError() << endl;
}
“构造”用户配置文件路径或 Windows 的任何其他特殊文件夹的任何其他方式都可能导致严重的问题。例如,如果配置文件位置在未来版本中发生更改(如在 Windows XP 和 Vista 之间发生),或者如果路径的某些部分依赖于语言(我认为自从 Vista 以来应该不再是问题),它会降低应用程序的可移植性,或者用户重新定位配置文件(可能是管理环境中的问题等。
另请注意,您应该为应用程序创建文件的位置不是配置文件的根路径,而是 AppData 或 LocalAppData(两者都可以使用适当的 CSIDL 进行查询)文件夹。
据我了解,您无法将用户名传递给函数。为什么不简单地创建一个新字符串并将其传递给函数,如下所示:
TCHAR name [UNLEN + 1];
UNLEN DWORD size = + 1;
GetUserName (name, & size);
TCHAR path [MAX_PATH + 1] = "c: \ \ users \ \";
strcat(path, name);
strcat(path,"\ \ file");
DeleteFile (path);
获得用户名后,将包含该用户名的字符串与您关心的其他部分放在一起。我会根据这个一般顺序考虑一些事情:
TCHAR name [UNLEN + 1];
DWORD size = UNLEN+1;
GetUserName(name, &size);
std::ostringstream buffer;
buffer << "C:\\users\\" << user_name << "\\file";
DeleteFile(buffer.str().c_str());