【问题标题】:How to convert legacy "C:\Documents and Settings" paths to "C:\Users"如何将旧版“C:\Documents and Settings”路径转换为“C:\Users”
【发布时间】:2011-07-07 01:15:27
【问题描述】:

我有一些在 Windows XP 上创建的旧数据。它包含用户“我的文档”目录中文件的绝对文件名。在 Windows 7 上,这些绝对引用不再指向正确的位置。例如,“C:\Documents and Settings\Gareth\My Documents\readme.txt”现在应该是“C:\Users\Gareth\Documents\readme.txt”。

许多 Win32 函数很乐意使用“C:\Documents and Settings”下的文件名,并在后台将它们转换为新的文件名,但是我们使用的某些函数不这样做。是否有可用于将这些文件名转换为新位置的 Windows API?

显然,我可以进行字符串搜索和替换,但不能保证在所有情况下都能正常工作。因为有些 Windows 函数似乎可以进行替换,所以感觉应该有一个已发布的函数,我可以调用它来做同样的事情。

只是为了澄清我的问题:我正在寻找执行此操作的函数:

输入:“C:\Documents and Settings\Gareth\My Documents\readme.txt”
输出:“C:\Users\Gareth\Documents\readme.txt”

输入:“C:\Documents and Settings\Gareth\My Documents\”
输出:“C:\Users\Gareth\Documents\”

【问题讨论】:

  • 这适用于符号链接。这应该适用于任何采用路径的功能。哪些没有? msdn.microsoft.com/en-us/library/aa365680%28v=VS.85%29.aspx
  • MapFileAndCheckSum() 是我们发现的问题。它显然是一个遗留函数,因为它的内部实现甚至不支持 unicode。
  • @Hans 你想用你所说的话发布答案吗?这可能是我对这个问题的最正确回答,所以我愿意接受。

标签: winapi windows-7


【解决方案1】:

这适用于符号链接。这应该适用于任何采用路径的函数,MSDN 文档在这里:msdn.microsoft.com/en-us/library/aa365680%28v=VS.85%29.aspx

我验证了 MapFileAndCheckSum(),它工作正常。 Windows7,使用 UNICODE 编译。

#include "stdafx.h"
#include <windows.h>
#include <assert.h>
#include <imagehlp.h>
#pragma comment(lib, "imagehlp.lib")

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD hdrsum, chksum;
    const wchar_t* path = L"c:\\documents and settings\\hpassant\\my documents\\test.exe";
    DWORD retval = MapFileAndCheckSum(path, &hdrsum, &chksum);
    assert(retval == 0);
    return 0;
}

【讨论】:

    【解决方案2】:

    这是你需要的吗? %USERPROFILE%\我的文档

    【讨论】:

    • 我使用 SHGetSpecialFolderLocation() 函数来检索当前系统的正确文件夹的位置。我需要解决的是如何将在 Windows XP 上创建的数据迁移到 Windows 7,该函数的返回值发生了变化。
    • 你为什么不直接替换字符串?获取您的字符串作为输入并将 C:\Documents and Settings\Gareth\My Documents\ 替换为 C:\Users\Gareth\Documents\ 的函数。我不确切知道 winapi 函数,但你需要 c# 中的 String.Replace(string, string) 之类的东西
    • 我不确定这是否适用于可能需要处理的所有数据 - 例如,某些用户可能在“我的图片”或其他已更改的位置中拥有数据。我可以尝试找出所有可能已移动的文件夹可能是什么,但鉴于 Windows 已经在幕后为某些功能执行此操作,我希望有一个我可以使用的 API。
    【解决方案3】:

    我不确定你到底在哪里使用它(自从我使用 Windows 以来已经有一段时间了),但我记得能够使用 %HOMEPATH% 变量来获取当前用户的 Documents & Settings 目录:\文档和设置{用户名}。我认为这也适用于更新的 Windows 7 路径。

    【讨论】:

    • 我使用 SHGetSpecialFolderLocation() 函数来检索当前系统的正确文件夹的位置。我需要解决的问题是将在 Windows XP 上创建的数据迁移到 Windows 7,该函数的返回值已更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2011-07-16
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    相关资源
    最近更新 更多