在Windows中获取OneDrive路径
本文关键字:OneDrive 路径 获取 Windows | 更新日期: 2023-09-27 18:29:30
我有一个C#WPF应用程序,我正在尝试找到一种方法来获取Windows中OneDrive根目录的路径。我如何通过编程实现这一点?我在网上搜索过,但什么也找不到。我希望我能提供一些代码,但我一无所知;我的意思是,我检查了系统环境变量,但在我的机器上找不到任何东西,我认为这可能是一个有效的解决方案,但没有找到任何东西。
随着windows 10的最新更新,微软引入了新的环境变量%OneDrive%,我在2017年4月的更新(创建者更新)中检查了它,它就在那里。
这对我有效(Windows 10 Pro,1803):
var oneDrivePath = Environment.GetEnvironmentVariable("OneDriveConsumer");
在我的Windows 8.1计算机上,保存此信息的注册表项是:HKEY_CURRENT_USER'Software'Microsoft'Windows'CurrentVersion'SkyDrive'UserFolder
我会尝试使用Registry.GetValue()
方法:
const string userRoot = "HKEY_CURRENT_USER";
const string subkey = @"Software'Microsoft'Windows'CurrentVersion'SkyDrive";
const string keyName = userRoot + "''" + subkey;
string oneDrivePath = (string)Registry.GetValue(keyName,
"UserFolder",
"Return this default if NoSuchName does not exist.");
Console.WriteLine("'r'n OneDrivePath : {0}", oneDrivePath);
我还找到了以下路径:
HKEY_LOCAL_MACHINE'SOFTWARE'Microsoft'Windows'CurrentVersion'Explorer'SyncRootManager'SkyDrive'UserSyncRoots'S-1-5-21-2696997101-1021499815-432504798-1004
HKEY_USERS'S-1-5-21-2696997101-1021499815-432504798-1004'Software'Microsoft'Windows'CurrentVersion'SkyDrive'UserFolder
我使用常量FOLDRID_SkyDrive获取OneDrive文件夹的位置(https://msdn.microsoft.com/library/dd378457.aspx)以及//检测AppData''LocalLow的位置的答案中的"GetKnownFolderPath"方法。
尽管环境变量"USERPROFILE"与"''OneDrive"组合有时会起作用,但如果用户移动了OneDrive文件夹,该环境变量实际上将是一个重新分析点,而不是实际位置。
在Windows 10 上测试
Guid FOLDERID_SkyDrive = new Guid("A52BBA46-E9E1-435f-B3D9-28DAA648C0F6");
location = GetKnownFolderPath(FOLDERID_SkyDrive);
为了完整性,似乎有3个环境变量集:OneDrive
OneDriveConsumer
OneDriveCommercial
在我的情况下,第一个和最后一个是相同的(我的OneDrive for Business帐户),中间一个是我的个人OneDrive。我在加入域的PC和未加入域的电脑上都看到了相同的结果,但都配置了OneDrive。在一台只有我的个人OneDrive的非域加入PC上,OneDrive
环境变量指向个人OneDrive。
我找不到任何Microsoft文档,但我认为最好忽略OneDrive
变量,只使用OneDriveConsumer
/OneDriveCommercial
变量来查找OneDrive文件夹。
Steve
如果您正在使用PowerShell,您可以使用以下命令:
$ENV:onedrive
private void button1_Click(object sender, EventArgs e)
{
try
{
const string userRoot = "HKEY_CURRENT_USER";
const string subkey = @"Software'Microsoft'OneDrive";
const string keyName = userRoot + "''" + subkey;
string oneDrivePath = (string)Microsoft.Win32.Registry.GetValue(keyName,
"UserFolder",
"Return this default if NoSuchName does not exist.");
Console.WriteLine("'r'n OneDrivePath : {0}", oneDrivePath);
string Onedrivepath= string.Format(oneDrivePath);
label1 .Text = string.Format(Onedrivepath);
}
catch (Exception)
{
/// throw;
}
}
要跟踪这些onedrive环境变量(它将显示以"一"开头的所有环境变量):
来自CMD:
$>set one
OneDrive=C:'Users'my_username'OneDrive - COMPANY
OneDriveCommercial=C:'Users'my_username'OneDrive - COMPANY
OneDriveConsumer=C:'Users'my_username'OneDrive
来自PowerShell:
$>dir env: | Where-Object {$_.Name -like "one*"}
OneDrive=C:'Users'my_username'OneDrive - COMPANY
OneDriveCommercial=C:'Users'my_username'OneDrive - COMPANY
OneDriveConsumer=C:'Users'my_username'OneDrive
或
$>Get-ChildItem env: | Where-Object {$_.Name -like "one*"}
OneDrive=C:'Users'my_username'OneDrive - COMPANY
OneDriveCommercial=C:'Users'my_username'OneDrive - COMPANY
OneDriveConsumer=C:'Users'my_username'OneDrive
我认为注册表是Smashing1978提到的,但我在HKEY_CURRENT_USER''Software''Microsoft''Windows''CurrentVersion''SkyDrive下没有UserFolder项。
你能使用%UserProfile%''SkyDrive路径吗?
您必须在注册表下找到路径。。。首先从搜索框中运行regedit,然后在软件下-Microsoft-查找OneDrive此处的图像描述
然后为您的子密钥字符串使用该路径
const string subkey=@"软件''Microsoft''OneDrive";
解决方案源代码在这里
在VBA中使用Environ("OneDriveConsumer")
注册表在某些PC上不适用。然而,这对我有效:
using System;
using System.IO;
DirectoryInfo di = DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
string path = di.Parent.FullName;
我只是略读了一下,但发现了一些问题&答案。这个问题问";。。。我正在尝试找到一种方法来获取OneDrive根目录的路径&";。我正在使用Win11&Win10(具体版本为10.0.19044)。两者都显示了与OneDrive设置相同的详细信息
OneDrive有两个路径需要考虑:缓存文件/文件夹的本地PC路径&包含所有内容的实际OneDrive路径。Windows允许用户在本地缓存所有或仅选定的文件/目录。所有的答案都集中在本地路径上。我提供了另一组详细信息,因为这会在资源管理器中打开OneDrive,而不是网页或本地缓存。这也回答了所问的问题,但使用OneDrive而不是本地缓存。
获取HKCU''Software''Microsoft''OneDrive''Accounts''Personal的值:cid(字符串值)。这是UNC路径所需的ID。UNC是:''''d.docs.live.net@SSL''[无论注册表CID是什么]。这将使你获得OneDrive中的所有内容,而不仅仅是PC上本地缓存的内容。你甚至可以将驱动器映射到UNC路径&它是有效的。
我还没有将其与OneDrive@work进行比较,但我会的。
海报是在寻找本地路径还是完整的OneDrive路径?
对于本地缓存路径,它在这里:HKCU''Software''Microsoft''OneDrive''Accounts''Personal value:UserFolder(字符串值)
依赖操作系统变量将您与特定版本的Win10或更高版本联系在一起,这可能不是一个好主意,具体取决于您的交付受众。我所描述的内容涵盖了本地缓存+整个OneDrive。
(您不需要SID或必须将SID转换为名称,也不需要使用不一定存在的操作系统变量)