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