Câu hỏi tương tự như here. Chỉ dành cho Google Drive
thay vì Dropbox
:Tôi làm cách nào để định vị thư mục Google Drive bằng cách sử dụng C#?
Làm cách nào để định vị thư mục Google Drive
bằng cách sử dụng C#?
- Đăng ký?
- Biến môi trường?
- Etc ...
Câu hỏi tương tự như here. Chỉ dành cho Google Drive
thay vì Dropbox
:Tôi làm cách nào để định vị thư mục Google Drive bằng cách sử dụng C#?
Làm cách nào để định vị thư mục Google Drive
bằng cách sử dụng C#?
Cá nhân tôi nghĩ, cách tốt nhất là truy cập cùng một tệp thông qua 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 "\\?\<path>" 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();
Bạn có thể nhận thư viện SQLite cho .Net từ here. Đồng thời thêm tham chiếu đến System.Data.SQLite
và đưa nó vào dự án của bạn để chạy mã trên.
Để lấy người sử dụng, relpace entry_key='user_email'
từ mã trên
tôi lấy câu trả lời Sarath của, làm lại nó được vững vàng hơn (dấu ngoặc kép quanh đường dẫn nguồn dữ liệu, null có điều kiện về việc lập chỉ mục đọc, bổ sung kiểm tra lỗi, "sử dụng" để đối tượng được xử lý một cách thích hợp, thêm một loạt các ý kiến, và ném vào một số LINQ (vì, linq :-)).
Triển khai cụ thể này bắt và ghi nhật ký ngoại lệ, sau đó trả về chuỗi.Không có bất kỳ lỗi nào ... vì đó là ứng dụng hiện tại của tôi cần đến nó. Xóa thử/nắm bắt nếu ứng dụng của bạn muốn ngoại lệ.
/// <summary>
/// Retrieves the local Google Drive directory, if any.
/// </summary>
/// <returns>Directory, or string.Empty if it can't be found</returns>
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[] { @"Google\Drive\" + dbName, @"Google\Drive\user_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 (e.g. 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;
}
}
Tôi muốn cho phép người dùng chọn "Google Drive" thay vì C: \ Users \ XY \ Google Drive \ làm thư mục mẹ trong khi cài đặt phần mềm của tôi. Tôi đã tìm kiếm sổ đăng ký và AppData. Có một sync_config.db trong% APPDATA% \ Local \ Google \ Drive, nhưng tôi không biết cách xử lý này. – wollnyst
Bạn đã thử sử dụng API Google Drive chưa? https://developers.google.com/drive/quickstart – Surfbutler
HAve bạn đã xem tại đây: https://developers.google.com/drive/examples/dotnet – Ademar