diff --git a/ShareX/ImageData.cs b/ShareX/ImageData.cs index e0bd5fc3c..6d10e6272 100644 --- a/ShareX/ImageData.cs +++ b/ShareX/ImageData.cs @@ -24,8 +24,10 @@ #endregion License Information (GPL v3) using ShareX.HelpersLib; +using ShareX.Properties; using System; using System.IO; +using System.Windows.Forms; namespace ShareX { @@ -46,6 +48,9 @@ public string Write(string filePath) catch (Exception e) { DebugHelper.WriteException(e); + MessageBox.Show(new Form() { WindowState = FormWindowState.Maximized, TopMost = true }, + string.Format(Resources.ImageData_Write_Error + "\r\n\r\n" + e, filePath), "ShareX", + MessageBoxButtons.OK, MessageBoxIcon.Error); } return string.Empty; diff --git a/ShareX/Properties/Resources.Designer.cs b/ShareX/Properties/Resources.Designer.cs index 1fc1f6d72..21b2a8285 100644 --- a/ShareX/Properties/Resources.Designer.cs +++ b/ShareX/Properties/Resources.Designer.cs @@ -1035,6 +1035,15 @@ public class Resources { } } + /// + /// Looks up a localized string similar to Could not write image to path {0}.. + /// + public static string ImageData_Write_Error { + get { + return ResourceManager.GetString("ImageData_Write_Error", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/ShareX/Properties/Resources.resx b/ShareX/Properties/Resources.resx index 74643a801..a76d495bf 100644 --- a/ShareX/Properties/Resources.resx +++ b/ShareX/Properties/Resources.resx @@ -811,4 +811,7 @@ Would you like to restart ShareX? ..\Resources\vn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + Could not write image to path {0}. + \ No newline at end of file diff --git a/ShareX/WorkerTask.cs b/ShareX/WorkerTask.cs index 84cb017d2..ffae9a0fe 100644 --- a/ShareX/WorkerTask.cs +++ b/ShareX/WorkerTask.cs @@ -561,24 +561,38 @@ private bool DoAfterCaptureJobs() { using (SaveFileDialog sfd = new SaveFileDialog()) { - if (string.IsNullOrEmpty(lastSaveAsFolder) || !Directory.Exists(lastSaveAsFolder)) - { - lastSaveAsFolder = Info.TaskSettings.CaptureFolder; - } + bool imageSaved = false; - sfd.InitialDirectory = lastSaveAsFolder; - sfd.FileName = Info.FileName; - sfd.DefaultExt = Path.GetExtension(Info.FileName).Substring(1); - sfd.Filter = string.Format("*{0}|*{0}|All files (*.*)|*.*", Path.GetExtension(Info.FileName)); - sfd.Title = Resources.UploadTask_DoAfterCaptureJobs_Choose_a_folder_to_save + " " + Path.GetFileName(Info.FileName); - - if (sfd.ShowDialog() == DialogResult.OK && !string.IsNullOrEmpty(sfd.FileName)) + do { - Info.FilePath = sfd.FileName; - lastSaveAsFolder = Path.GetDirectoryName(Info.FilePath); - imageData.Write(Info.FilePath); - DebugHelper.WriteLine("Image saved to file with dialog: " + Info.FilePath); - } + if (string.IsNullOrEmpty(lastSaveAsFolder) || !Directory.Exists(lastSaveAsFolder)) + { + lastSaveAsFolder = Info.TaskSettings.CaptureFolder; + } + + sfd.InitialDirectory = lastSaveAsFolder; + sfd.FileName = Info.FileName; + sfd.DefaultExt = Path.GetExtension(Info.FileName).Substring(1); + sfd.Filter = string.Format("*{0}|*{0}|All files (*.*)|*.*", Path.GetExtension(Info.FileName)); + sfd.Title = Resources.UploadTask_DoAfterCaptureJobs_Choose_a_folder_to_save + " " + Path.GetFileName(Info.FileName); + + if (sfd.ShowDialog() == DialogResult.OK && !string.IsNullOrEmpty(sfd.FileName)) + { + Info.FilePath = sfd.FileName; + lastSaveAsFolder = Path.GetDirectoryName(Info.FilePath); + imageSaved = imageData.Write(Info.FilePath) == Info.FilePath; + + if (imageSaved) + { + DebugHelper.WriteLine("Image saved to file with dialog: " + Info.FilePath); + } + } + else + { + // User cancelled the dialog - stop image saving retries. + return false; + } + } while (!imageSaved); } }