如何使用C#以编程方式找到我的Google云端硬盘文件夹?
类似的问题在这里 。 仅适用于Google Drive
而不是Dropbox
:
如何使用C#以编程方式找到我的Google Drive
文件夹?
我个人认为,最好的方法是通过SQLite3访问同一个文件。
string dbFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Google\Drive\sync_config.db"); if (!File.Exists(dbFilePath)) dbFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Google\Drive\user_default\sync_config.db"); string csGdrive = @"Data Source="+ dbFilePath + ";Version=3;New=False;Compress=True;"; SQLiteConnection con = new SQLiteConnection(csGdrive); con.Open(); SQLiteCommand sqLitecmd = new SQLiteCommand(con); //To retrieve the folder use the following command text sqLitecmd.CommandText = "select * from data where entry_key='local_sync_root_path'"; SQLiteDataReader reader = sqLitecmd.ExecuteReader(); reader.Read(); //String retrieved is in the format "\?" that's why I have used Substring function to extract the path alone. Console.WriteLine("Google Drive Folder: " + reader["data_value"].ToString().Substring(4)); con.Dispose();
您可以从此处获取.Net的SQLite库。 还要添加对System.Data.SQLite
引用,并将其包含在项目中以运行上面的代码。
要检索用户,请从上面的代码中重新输入entry_key='user_email'
我接受了Sarath的回答,将其重新修改为更具弹性(引用数据源路径,null取决于读者索引,附加错误检查,“使用”因此对象被适当处理,添加了一堆注释,并抛出一些LINQ(因为,linq :-))。
这个特定的实现捕获并记录exception,然后在任何错误上返回string.Empty …因为这是我当前应用程序需要它的方式。 如果您的应用需要例外,请删除try / catch。
上述就是C#学习教程:如何使用C#以编程方式找到我的Google云端硬盘文件夹?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
/// /// Retrieves the local Google Drive directory, if any. /// /// Directory, or string.Empty if it can't be found public static string GetGoogleDriveDirectory() { try { // Google Drive's sync database can be in a couple different locations. Go find it. string appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); string dbName = "sync_config.db"; var pathsToTry = new[] { @"GoogleDrive" + dbName, @"GoogleDriveuser_default"+ dbName }; string syncDbPath = (from p in pathsToTry where File.Exists(Path.Combine(appDataPath, p)) select Path.Combine(appDataPath, p)) .FirstOrDefault(); if (syncDbPath == null) throw new FileNotFoundException("Cannot find Google Drive sync database", dbName); // Build the connection and sql command string conString = string.Format(@"Data Source='{0}';Version=3;New=False;Compress=True;", syncDbPath); using (var con = new SQLiteConnection(conString)) using (var cmd = new SQLiteCommand("select * from data where entry_key='local_sync_root_path'", con)) { // Open the connection and execute the command con.Open(); var reader = cmd.ExecuteReader(); reader.Read(); // Extract the data from the reader string path = reader["data_value"]?.ToString(); if (string.IsNullOrWhiteSpace(path)) throw new InvalidDataException("Cannot read 'local_sync_root_path' from Google Drive configuration db"); // By default, the path will be prefixed with "\?" (unless another app has explicitly changed it). // \? indicates to Win32 that the filename may be longer than MAX_PATH (see MSDN). // Parts of .NET (eg the File class) don't handle this very well, so remove this prefix. if (path.StartsWith(@"\?")) path = path.Substring(@"\?".Length); return path; } } catch (Exception ex) { Trace.TraceError("Cannot determine Google Drive location. Error {0} - {1}", ex.Message, ex.StackTrace); return string.Empty; } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/998814.html