Как преобразовать устаревшие пути «C: \ Documents and Settings» в «C: \ Users» - PullRequest
2 голосов
/ 07 июля 2011

У меня есть устаревшие данные, созданные в Windows XP.Он содержит абсолютные имена файлов для файлов в пользовательских каталогах «Мои документы».В Windows 7 эти абсолютные ссылки больше не указывают на правильное место.Например, что было «C: \ Documents and Settings \ Gareth \ Мои документы \ readme.txt» теперь должно быть «C: \ Users \ Gareth \ Documents \ readme.txt».

Многие функции Win32 счастливывзять имена файлов в «C: \ Documents and Settings» и закулисно преобразовать их в новые имена файлов, однако есть функции, которые мы используем, которые этого не делают.Существует ли Windows API, который я могу использовать для преобразования этих имен файлов в новые местоположения?

Очевидно, я мог бы выполнять поиск и замену строк, но это не гарантировало бы работу при любых обстоятельствах.Поскольку есть функции Windows, которые, похоже, выполняют подстановку, создается впечатление, что должна быть опубликованная функция, которую я могу вызвать, чтобы сделать то же самое.

Просто чтобы прояснить мой вопрос: я ищу функцию, котораяделает это:

Ввод: «C: \ Documents and Settings \ Gareth \ Мои документы \ readme.txt»
Ввод: «C: \ Users \ Gareth \ Documents \ readme.txt»

или

Ввод: "C: \ Documents and Settings \ Gareth \ Мои документы \"
Вывод: "C: \ Users \ Gareth \ Documents \"

Ответы [ 3 ]

2 голосов
/ 07 июля 2011

Работает с символическими ссылками. Это должно работать для любой функции, которая принимает путь, документация 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;
}
0 голосов
/ 07 июля 2011

Я не уверен, где именно вы используете это (и я уже давно не пользуюсь Windows), но я помню, что смог использовать переменную% HOMEPATH%, чтобы получить каталог текущего пользователя для Documents & Settings: \ Documents and Settings {имя пользователя}.Я думаю, что это работает и с обновленными путями Windows 7.

0 голосов
/ 07 июля 2011

Это то, что вам нужно? % USERPROFILE% \ Мои документы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...