net google example conectar con c# .net google-drive-sdk

example - ¿Cómo localizo de manera programática mi carpeta de Google Drive usando C#?



sdk de drive (2)

Pregunta similar que here . Solo para Google Drive lugar de Dropbox :

¿Cómo localizo de manera programática mi carpeta de Google Drive usando C #?

  • ¿Registro?
  • ¿Variable ambiental?
  • Etc ...

Personalmente creo que la mejor manera es acceder al mismo archivo a través de 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();

Puede obtener la biblioteca SQLite para .Net desde here . También agregue una referencia a System.Data.SQLite e System.Data.SQLite en su proyecto para ejecutar el código anterior.

Para recuperar al usuario, relpace entry_key=''user_email'' del código anterior


Tomé la respuesta de Sarath, la modifiqué para que fuera más resistente (cita alrededor de la ruta de la fuente de datos, condicional nula en la indexación del lector, verificación de errores adicional, "usando" para que los objetos se eliminen de manera apropiada, agregue un montón de comentarios y los agregue a LINQ porque, linq :-)).

Esta implementación en particular detecta y registra excepciones, y luego devuelve string.Empty en cualquier error ... porque así es como mi aplicación actual lo necesita. Elimine el try / catch si su aplicación quiere excepciones.

/// <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; } }