diff --git a/src/files.c b/src/files.c
index 0d2cec04e178cb78473afbbce80bb40c1b130d41..d42b8ac7aa08ca4952d9ed556f3846af09fdd3b0 100644
--- a/src/files.c
+++ b/src/files.c
@@ -1336,9 +1336,15 @@ int write_file(const char *name, FILE *f_open, bool tmp, append_type
 		statusbar(_("Error reading %s: %s"), realname,
 			strerror(errno));
 		beep();
-		/* If we can't open the original file, we won't be able
-		 * to save it, so get out. */
-		goto cleanup_and_exit;
+		/* If we can't read from the original file, and we're
+		 * prepending, get out, since we won't be able to save
+		 * either the backup or the original file.  If we're not
+		 * prepending, go on, since only saving the original
+		 * file is better than saving nothing. */
+		if (append == PREPEND)
+		    goto cleanup_and_exit;
+		else
+		    goto skip_backup;
 	    }
 	}