Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C+;中,我可以使用什么作为Environment.SpecialFolder.CommonApplicationData的等效项+;?_C#_C++_Windows_Environment Variables - Fatal编程技术网

C# 在C+;中,我可以使用什么作为Environment.SpecialFolder.CommonApplicationData的等效项+;?

C# 在C+;中,我可以使用什么作为Environment.SpecialFolder.CommonApplicationData的等效项+;?,c#,c++,windows,environment-variables,C#,C++,Windows,Environment Variables,我正在尝试与一个特定的系统接口,该系统检查文件是否位于特定位置,如果位于特定位置,则使用存储在该文件中的url下载更新 我正在使用的C#test application对话框作为示例,通过使用C#helper类解决了这个问题,C#helper类通过在“Environment.SpecialFolder.CommonApplicationData”中添加文件夹来形成文件路径。从那里,它可以编辑和删除文件,以控制系统的行为。所以我的C++应用程序需要做同样的事情。 我需要的是在C++中获取路径的方法

我正在尝试与一个特定的系统接口,该系统检查文件是否位于特定位置,如果位于特定位置,则使用存储在该文件中的url下载更新

我正在使用的C#test application对话框作为示例,通过使用C#helper类解决了这个问题,C#helper类通过在“Environment.SpecialFolder.CommonApplicationData”中添加文件夹来形成文件路径。从那里,它可以编辑和删除文件,以控制系统的行为。所以我的C++应用程序需要做同样的事情。 我需要的是在C++中获取路径的方法。我可以重构它的每一部分,但C#环境变量除外,它是操作系统特有的

<>强>那么,我如何获得C++中的“环境?
(解决“查找此文件”问题的解决方案是可以接受的,具体取决于我必须修改的工作代码量)

您可能应该将函数
SHGetSpecialFolderPath
CSIDL\u COMMON\u APPDATA
一起使用,请参阅

作为备用方案,您始终可以读取注册表项

HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell 文件夹\通用应用程序数据


您可能应该将函数
SHGetSpecialFolderPath
CSIDL\u COMMON\u APPDATA
一起使用,请参阅

作为备用方案,您始终可以读取注册表项

HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell 文件夹\通用应用程序数据

的MSDN页面显示:

不支持SHGetSpecialFolderPath。相反,请使用ShGetFolderPath

但已弃用,并包含以下注释:

从Windows Vista开始,此函数仅是SHGetKnownFolderPath的包装器。CSIDL值被转换为其关联的KNOWNFOLDERID,然后调用SHGetKnownFolderPath。新应用程序应使用已知的文件夹系统,而不是旧的CSIDL系统,后者仅支持向后兼容

正确的方法是:

#include "stdafx.h"
#include <windows.h>
#include <KnownFolders.h>
#include <ShlObj.h>

int main()
{
    PWSTR path = NULL;

    HRESULT result = SHGetKnownFolderPath(FOLDERID_ProgramData, 0, NULL, &path);
    if (SUCCEEDED(result)) {
        wprintf_s(L"Path: %ls\n", path);
    }

    CoTaskMemFree(path);
    return 0;
}
#包括“stdafx.h”
#包括
#包括
#包括
int main()
{
pwstrpath=NULL;
HRESULT result=SHGetKnownFolderPath(FOLDERID\u ProgramData,0,NULL,&path);
如果(成功(结果)){
wprintf_s(L“路径:%ls\n”,路径);
}
CoTaskMemFree(路径);
返回0;
}
的MSDN页面上写着:

不支持SHGetSpecialFolderPath。相反,请使用ShGetFolderPath

但已弃用,并包含以下注释:

从Windows Vista开始,此函数仅是SHGetKnownFolderPath的包装器。CSIDL值被转换为其关联的KNOWNFOLDERID,然后调用SHGetKnownFolderPath。新应用程序应使用已知的文件夹系统,而不是旧的CSIDL系统,后者仅支持向后兼容

正确的方法是:

#include "stdafx.h"
#include <windows.h>
#include <KnownFolders.h>
#include <ShlObj.h>

int main()
{
    PWSTR path = NULL;

    HRESULT result = SHGetKnownFolderPath(FOLDERID_ProgramData, 0, NULL, &path);
    if (SUCCEEDED(result)) {
        wprintf_s(L"Path: %ls\n", path);
    }

    CoTaskMemFree(path);
    return 0;
}
#包括“stdafx.h”
#包括
#包括
#包括
int main()
{
pwstrpath=NULL;
HRESULT result=SHGetKnownFolderPath(FOLDERID\u ProgramData,0,NULL,&path);
如果(成功(结果)){
wprintf_s(L“路径:%ls\n”,路径);
}
CoTaskMemFree(路径);
返回0;
}