3

この記事のおかげで、

C#を使用してDropboxフォルダーをプログラムで見つけるにはどうすればよいですか?

プログラムでDropboxフォルダを見つけることができます。さて、さまざまなAPIをインストールして使用せずに、GoogleDriveとMS SkyDriveで同じことを行うにはどうすればよいですか?

Vb.NetまたはC#ソリューションはOKです...

4

4 に答える 4

2

ここで答えの一部を見つけました...

C#を使用してプログラムでGoogleドライブフォルダを見つけるにはどうすればよいですか?

これが3つの主要なWebfolderサービスのコードです

Dim StoreFolder As String = ""
' Dropbox
Dim dbPath As String = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Dropbox\\host.db")
Dim lines() As String = System.IO.File.ReadAllLines(dbPath)
Dim dbBase64Text As Byte() = Convert.FromBase64String(lines(1))
StoreFolder = System.Text.ASCIIEncoding.ASCII.GetString(dbBase64Text)

' SkyDrive
StoreFolder = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\Microsoft\SkyDrive", "UserFolder", Nothing)

' Google Drive
Dim dbPath As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Google\\Drive\\sync_config.db")
File.Copy(dbPath, "temp.db", True)
StoreFolder = File.ReadAllText("temp.db", System.Text.Encoding.ASCII)
StoreFolder = StoreFolder.Substring(StoreFolder.IndexOf("local_sync_root_pathvalue") + 29)
StoreFolder = StoreFolder.Substring(0, StoreFolder.IndexOf(Char.ConvertFromUtf32(24)))
于 2012-12-04T12:44:26.863 に答える
2

OneDrive / SkyDrive

Chiwdaのソリューションは私を正しい方向に導きましたが、レジストリキーが存在しなかったため、私のマシン(Windows 8.1ドイツ語)では直接機能していませんでした。

代わりに、これは機能しました:

private static string getOneDriveFolderPath()
{
    var value1 = Registry.GetValue(
        @"HKEY_CURRENT_USER\Software\Microsoft\SkyDrive", 
        @"UserFolder", null);

    var path1 = value1 as string;
    if (path1 != null && Directory.Exist(path1)) return path1;

    var value2 = Registry.GetValue(
        @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\SkyDrive",
        @"UserFolder", null);

    var path2 = value2 as string;
    if (path2 != null && Directory.Exists(path2)) return path2;

    var value3 = Registry.GetValue(
        @"HKEY_CURRENT_USER\Software\Microsoft\OneDrive",
        @"UserFolder", null);

    var path3 = value3 as string;
    if (path3 != null && Directory.Exists(path3)) return path3;

    return null;
}

コードは、私のマシンに存在していたパスを試行するよりも、最初にChiwdaの回答のパスを試行します。

于 2015-04-10T13:03:37.110 に答える
1

グーグルドライブ

繰り返しになりますが、Chiwdaのソリューションは私に正しい方法を示しました。Googleドライブでは、ローカルフォルダへのパスを読み取るためにSQLiteライブラリを利用できる必要があります。

私のコード:

private static string checkGetGoogleDriveLocation()
{
    var appDataPath = Environment.GetFolderPath(
                          Environment.SpecialFolder.LocalApplicationData);
    var dbPath = Path.Combine(appDataPath, 
                     @"Google\Drive\user_default\sync_config.db");

    if (!File.Exists(dbPath)) return null;

    var tmp = dbPath + Guid.NewGuid();
    File.CopyFile(dbPath, tmp);

    var folderPath = tryGetFolderFromGoogleDriveDB(tmp);
    if (string.IsNullOrEmpty(folderPath) || !Directory.Exists(folderPath)) return null;

    File.Delete(folderPath);

    return folderPath;
}

GitHubでも利用できる「sqlite-net」NuGetパッケージtryGetFolderFromGoogleDriveDBを使用して関数を実装しました。

private static string tryGetFolderFromGoogleDriveDB(string dbFilePath)
{
    using (var conn = new SQLiteConnection(dbFilePath, SQLiteOpenFlags.ReadOnly))
    {
        var cmd = conn.CreateCommand(
            @"select data_value from data where entry_key='local_sync_root_path'");
        return cmd.ExecuteScalar<string>();
    }
}

sqlite-netパッケージはネイティブsqlite3.dllファイルをP/Invokeするため、このコードを使用している実行可能ファイルと同じフォルダーに保存されていることを確認する必要があることに注意してください。

于 2015-04-10T13:34:35.317 に答える
0

使用できるものは完全ではありませんが、VB.net用にリバースエンジニアリングできる可能性があります。一部のドキュメントをユーザーのDropboxフォルダーに保存するためにVBAに使用したソリューション。デフォルトのインストール場所で検索し、見つからない場合は、フォルダの入力を求めます。ほとんどの人はとにかくデフォルトの場所をIMOのままにするので、それを見逃すことはめったにありません。メモリから、SkyDriveとGoogleドライブも同じデフォルトの場所のパターンに従うため、少し調整するだけですべてを見つけることができます。

Sub finddropbox()
Dim strOS, localdrive, dropboxfolder As String
Dim folderSelect As FileDialog
Dim objWMIService, colOperatingSystems, objOperatingSystem

strComputer = "."    
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")

For Each objOperatingSystem In colOperatingSystems
    strOS = objOperatingSystem.Caption
Next

If InStr(strOS, "XP") Then
    localdrive = Environ("USERPROFILE") & "\My Documents\"
Else
    localdrive = Environ("USERPROFILE")
End If

dropboxfolder = localdrive & "Dropbox\"
If Dir(dropboxfolder, vbDirectory) = vbNullString Then
    Set folderSelect = Application.FileDialog(msoFileDialogFolderPicker)
        With folderSelect
            .Title = "Select Dropbox Folder"
            .AllowMultiSelect = False
            .InitialFileName = Environ("SYSTEMDRIVE")
            If .Show = -1 Then
                dropboxfolder = .SelectedItems(1)
            End If
       End With
End If

Debug.Print dropboxfolder

End Sub
于 2013-12-19T12:00:11.920 に答える