24/03/22 8:00
actarus999
Ciao a tutti, ho bisogno di scrivere su un file dentro una cartella del mio account su Google Drive.
Per fare ciò ho scritto un'applicazione desktop in VB.net mediante le Google Driver API v3.
Dal momento che sia io che il mio amico entriamo nello stesso account da differenti PC e modifichiamo il file mediante il software che ho creato in VB.net mi chiedevo se esiste un metodo per verificare se il file è aperto da un altro utente prima di aprirlo cosicché evito di farlo aprire e creo una sorta di apertura esclusiva al file.
Non so se esiste già questa possibilità nelle opzioni di Google Drive senza passare dalle api (cioè abilitarla con un semplice click nelle impostazioni di google).
Potrei provare a settare i permessi al file "di sola lettura" una volta aperto dalla mia applicazione ma credo che non sia una buona idea perché se per esempio va via la luce o il software va in crash per altri motivi, il file rimarrà per sempre di sola lettura.
Ecco la procedura che ho creato per:
connettermi al mio Google Drive con le mie credenziali
ricerca della mia cartella e lettura del suo ID
ricerca del mio file e lettura del suo ID
Public Sub GoogleDrive()
Dim credential As UserCredential
Dim ID_Folder As String = ""
Dim ID_File As String = ""
Using Stream = New FileStream("credenzials.json", FileMode.Open, FileAccess.Read)
'The file token.json stores the user's access and refresh tokens, and is created
'automatically when the authorization flow completes for the first time.
Dim credPath As String = "token.json"
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(Stream).Secrets,
Scopes,
"user",
CancellationToken.None,
New FileDataStore(credPath, True)).Result
Console.WriteLine("Credential file saved to: " + credPath)
End Using
'Create Drive API service.
Dim Service = New DriveService(New BaseClientService.Initializer() With
{
.HttpClientInitializer = credential,
.ApplicationName = ApplicationName
})
' Define parameters of request.
Try
Dim findrequest As FilesResource.ListRequest = Service.Files.List()
findrequest.PageSize = 10
findrequest.Fields = "nextPageToken, files(id, name)"
findrequest.Spaces = "drive"
Dim listFolder As Data.FileList = findrequest.Execute()
If listFolder.Files.Count > 0 Then
For Each item In listFolder.Files
If item.MimeType = "application/vnd.google-apps.folder" Then
If item.Name = "MyFolder" Then
ID_Folder = item.Id.ToString
End If
End If
'
If item.MimeType = "application/msaccess" Then
If item.Name = "myFile.mdb" Then
ID_File = item.Id.ToString
End If
End If
If (ID_File <> "" And (ID_Folder <> "" Then
'Si può verificare se aperto da altro utente ?
Exit For
End If
Next
End If
Catch ex As Exception
'MsgBox(ex.Message)
Throw ex
End Try
End Sub
Qualcuno mi può aiutare ?
Grazie in anticipo
Per fare ciò ho scritto un'applicazione desktop in VB.net mediante le Google Driver API v3.
Dal momento che sia io che il mio amico entriamo nello stesso account da differenti PC e modifichiamo il file mediante il software che ho creato in VB.net mi chiedevo se esiste un metodo per verificare se il file è aperto da un altro utente prima di aprirlo cosicché evito di farlo aprire e creo una sorta di apertura esclusiva al file.
Non so se esiste già questa possibilità nelle opzioni di Google Drive senza passare dalle api (cioè abilitarla con un semplice click nelle impostazioni di google).
Potrei provare a settare i permessi al file "di sola lettura" una volta aperto dalla mia applicazione ma credo che non sia una buona idea perché se per esempio va via la luce o il software va in crash per altri motivi, il file rimarrà per sempre di sola lettura.
Ecco la procedura che ho creato per:
connettermi al mio Google Drive con le mie credenziali
ricerca della mia cartella e lettura del suo ID
ricerca del mio file e lettura del suo ID
Public Sub GoogleDrive()
Dim credential As UserCredential
Dim ID_Folder As String = ""
Dim ID_File As String = ""
Using Stream = New FileStream("credenzials.json", FileMode.Open, FileAccess.Read)
'The file token.json stores the user's access and refresh tokens, and is created
'automatically when the authorization flow completes for the first time.
Dim credPath As String = "token.json"
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(Stream).Secrets,
Scopes,
"user",
CancellationToken.None,
New FileDataStore(credPath, True)).Result
Console.WriteLine("Credential file saved to: " + credPath)
End Using
'Create Drive API service.
Dim Service = New DriveService(New BaseClientService.Initializer() With
{
.HttpClientInitializer = credential,
.ApplicationName = ApplicationName
})
' Define parameters of request.
Try
Dim findrequest As FilesResource.ListRequest = Service.Files.List()
findrequest.PageSize = 10
findrequest.Fields = "nextPageToken, files(id, name)"
findrequest.Spaces = "drive"
Dim listFolder As Data.FileList = findrequest.Execute()
If listFolder.Files.Count > 0 Then
For Each item In listFolder.Files
If item.MimeType = "application/vnd.google-apps.folder" Then
If item.Name = "MyFolder" Then
ID_Folder = item.Id.ToString
End If
End If
'
If item.MimeType = "application/msaccess" Then
If item.Name = "myFile.mdb" Then
ID_File = item.Id.ToString
End If
End If
If (ID_File <> "" And (ID_Folder <> "" Then
'Si può verificare se aperto da altro utente ?
Exit For
End If
Next
End If
Catch ex As Exception
'MsgBox(ex.Message)
Throw ex
End Try
End Sub
Qualcuno mi può aiutare ?
Grazie in anticipo