0

我想删除用户使用函数DeleteFile()库登录的文件我没有得到......

我试过这个:

DeleteFile ("c: \ \ users \ \% username% \ \ file");

还尝试像这样捕获用户名:

TCHAR name [UNLEN + 1];
UNLEN DWORD size = + 1;
GetUserName (name, & size);

但不知道要放变量name函数DeleteFile()

4

3 回答 3

1

获取用户配置文件目录的唯一干净方法是将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 进行查询)文件夹。

于 2013-07-31T07:09:25.907 回答
0

据我了解,您无法将用户名传递给函数。为什么不简单地创建一个新字符串并将其传递给函数,如下所示:

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);
于 2013-07-31T06:25:43.510 回答
0

获得用户名后,将包含该用户名的字符串与您关心的其他部分放在一起。我会根据这个一般顺序考虑一些事情:

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());
于 2013-07-31T06:19:44.447 回答