Salve ragazzi, scusate se vi pongo questa domanda può sembrarvi banale, ma proprio non riesco a capire.
Vi spiego, dopo aver premuto sul solito button si avvia una procedura relativamente lunga ( varia dalla quantità di dati ).
Per prima cosa mi collego ad un database SQL, per effettuare la copia dello stesso, fatto questo, comprimo varie cartelle, salvando tutto in un'unica sotto cartella con la data.
Una volta che ha fatto tutto questo dovrebbe partire un upload dei dati su Google Drive.
Il problema che l'operazione riguardante il caricamento dei dati su Google Drive, che si avvia prima che le operazioni si concludano.
Vi inserisco il codice sperando che qualcuno possa aiutarmi o spiegarmi il meccanismo.
Grazie
codice:
private void do_Work(object sender, DoWorkEventArgs e)
{
conn = new SqlConnection(st);
conn.Open();
SqlCommand sqlDBrestoreCommand = new SqlCommand();
sqlDBrestoreCommand.Connection = conn;
sqlDBrestoreCommand.CommandText = "Use Master";
sqlDBrestoreCommand.ExecuteNonQuery();
Directory.CreateDirectory(UpdateTe.Properties.Settings.Default.FolderSave + "\\Save-" + DateTime.Now.ToString("dd_MMMM_yyyy") + "-" + timelinux);
DirectorySecurity sec = Directory.GetAccessControl(UpdateTe.Properties.Settings.Default.FolderSave + "\\Save-" + DateTime.Now.ToString("dd_MMMM_yyyy") + "-" + timelinux);
SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
sec.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.Modify | FileSystemRights.Synchronize, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
Directory.SetAccessControl(UpdateTele.Properties.Settings.Default.FolderSave + "\\Save-" + DateTime.Now.ToString("dd_MMMM_yyyy") + "-" + timelinux, sec);
sqlDBrestoreCommand.CommandText = "BACKUP DATABASE [DB.net] TO DISK = N'" + UpdateTe.Properties.Settings.Default.FolderSave + "\\Save-" + DateTime.Now.ToString("dd_MMMM_yyyy") + "-" + timelinux + "\\Database.bak' WITH NOFORMAT, NOINIT, NAME = N'Completo Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10";
sqlDBrestoreCommand.ExecuteNonQuery();
conn.Close();
ProgressBar3.Value = 100;
string[] filePaths = Directory.GetFiles(@"c:\FolderSave\", "*.*", SearchOption.AllDirectories);
double conunt = filePaths.Count();
using (var zip = System.IO.File.OpenWrite(UpdateTe.Properties.Settings.Default.FolderSave + "\\Save-" + DateTime.Now.ToString("dd_MMMM_yyyy") + "-" + timelinux + "\\archive.zip"))
using (
var zipWriter = WriterFactory.Open(
zip,
ArchiveType.Zip,
CompressionType.Deflate
)
)
{
double cProgress = 0;
progressBarBackup.Maximum = 100;
progressBarBackup.Minimum = 0;
foreach (var filePath in filePaths)
{
cProgress = cProgress + 1;
double Avanzo = (cProgress / conunt) * 100;
if (!Path.GetDirectoryName(filePath).Contains("pdf"))
{
zipWriter.Write(filePath, filePath);
}
progressBarBackup.Value = (int)Avanzo;
}
}
}
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
ServiceController sc = new ServiceController(TextBox2.Text);
ResultService = sc.Status.ToString();
try
{
ProgressBar4.Value = 50;
if (sc.Status.Equals(ServiceControllerStatus.Stopped))
{
sc.Start();
sc.WaitForStatus(ServiceControllerStatus.Running);
ProgressBar4.Value = 100;
}
else
{
ProgressBar4.Value = 100;
}
}
catch (Exception es)
{
buttonGdrive.Enabled = true;
Button1.Enabled = true;
}
return;
}
private void buttonGdrive_Click(object sender, EventArgs e)
{
buttonGdrive.Enabled = false;
Button1.Enabled = false;
timelinux = DateTime.Now.Ticks.ToString();
string FolderSaveNow = "Save - " + DateTime.Now.ToString("dd_MMMM_yyyy") + " - " + timelinux;
if (string.IsNullOrEmpty(UpdateTe.Properties.Settings.Default.FolderSave) || string.IsNullOrEmpty(UpdateTe.Properties.Settings.Default.ServiceApache))
{
TabControl1.SelectedTab = TabPage2;
if (string.IsNullOrEmpty(UpdateTe.Properties.Settings.Default.FolderSave))
TextBox5.Focus();
if (string.IsNullOrEmpty(UpdateTe.Properties.Settings.Default.ServiceApache))
TextBox2.Focus();
}
else
{
ProgressBar2.Value = 0;
ProgressBar3.Value = 0;
ProgressBar4.Value = 0;
progressBarBackup.Value = 0;
try
{
ProgressBarGDrive.Style = ProgressBarStyle.Marquee;
ProgressBarGDrive.MarqueeAnimationSpeed = 30;
ServiceController sc = new ServiceController(TextBox2.Text);
ResultService = sc.Status.ToString();
ProgressBar2.Value = 50;
if (sc.Status.Equals(ServiceControllerStatus.Running))
{
sc.Stop();
sc.WaitForStatus(ServiceControllerStatus.Stopped);
ProgressBar2.Value = 100;
}
else
{
ProgressBar2.Value = 100;
}
Thread tsThread = new Thread(() =>
{
UserCredential credential;
using (var stream = new FileStream(@"client_secret.json", FileMode.Open, FileAccess.ReadWrite))
{
string credPath = Path.GetDirectoryName(Application.ExecutablePath);
credPath = Path.Combine(credPath, ".credentials/drive-dotnet-quickstart");
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(TextBox5.Text, true)
).Result;
richTextBox3.AppendText("Credential file saved to: " + credPath + Environment.NewLine);
}
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
Google.Apis.Drive.v3.Data.File fileMetadata = new Google.Apis.Drive.v3.Data.File();
fileMetadata.Name = FolderSaveNow;
fileMetadata.Description = "Backup del " + DateTime.Now.ToString("dd MMMM yyyy");
fileMetadata.MimeType = "application/vnd.google-apps.folder";
var request = service.Files.Create(fileMetadata);
request.Fields = "id";
var file = request.Execute();
richTextBox3.AppendText("Folder ID :" + file.Id + Environment.NewLine);
var folderId = file.Id;
Google.Apis.Drive.v3.Data.File fileMetadata_tow = new Google.Apis.Drive.v3.Data.File();
fileMetadata_tow.Name = "Database.bak";
fileMetadata_tow.Description = "Il file contiene tutti i dati del gestionale - Si consiglia di non cancellare il file";
fileMetadata_tow.Parents = new List<string> { folderId };
FilesResource.CreateMediaUpload requests;
using (var stream = new System.IO.FileStream(UpdateTe.Properties.Settings.Default.FolderSave + "\\" + FolderSaveNow + "\\Database.bak", System.IO.FileMode.Open))
{
requests = service.Files.Create(fileMetadata_tow, stream, "application/octet-stream");
requests.Fields = "id";
requests.Upload();
}
var files = requests.ResponseBody;
richTextBox3.AppendText("File .bak ID :" + files.Id + Environment.NewLine);
fileMetadata_tow.Name = "archive.rar";
fileMetadata_tow.Description = "Il file contiene i report, allegati e le fatture elettroniche - Si consiglia di non cancellare il file";
using (var stream = new System.IO.FileStream(UpdateTe.Properties.Settings.Default.FolderSave + "\\" + FolderSaveNow + "\\archive.rar", System.IO.FileMode.Open))
{
requests = service.Files.Create(fileMetadata_tow, stream, "application/octet-stream");
requests.Fields = "id";
requests.Upload();
}
files = requests.ResponseBody;
richTextBox3.AppendText("File .rar ID :" + files.Id + Environment.NewLine);
ProgressBarGDrive.Style = ProgressBarStyle.Continuous;
ProgressBarGDrive.Value = 100;
});
var bw = new BackgroundWorker();
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.DoWork += new DoWorkEventHandler(do_Work);
bw.RunWorkerAsync();
tsThread.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + " " + ex.HelpLink);
buttonGdrive.Enabled = true;
Button1.Enabled = true;
}
}
}