Copy link to clipboard
Copied
I work in Photoshop a lot and have been dealing with this issue for a while. I’ve found workarounds, but it’s gotten to the point where I can’t ignore it anymore.
When I try to save PSD or PSB files, it struggles hard. Sometimes it takes like 20–30 mins to save a file. I understand they’re large files, but I don’t remember it ever taking this long. A lot of the time it fails entirely and gives me one of these two errors:
1.) Error 0x8007045D: The request could not be performed because of an I/O device error.
2.) Could not save “DSC000” because of a disk error.
A couple months ago, I found a workaround by saving to the desktop first and then moving it to the external SSD, but that has stopped working.
I used to not have many issues with JPGs, but now those are starting to be a problem too. I’m having trouble saving them directly to the SSD from Photoshop. The workaround still works for JPGs, but not for PSD/PSB files.
SSD: Samsung T7 Shield – 1TB capacity, ~500GB free
Yesterday, I updated to Windows 11 (I hate it) and also updated the BIOS (hadn’t done it since I built the PC in ’22) because Lightroom kept crashing. Lightroom no longer crashes, but I’ve noticed Adobe programs in general are running slower than normal (all are up to date).
1.) Is there a way to fix my SSD so this isn’t an issue and I can save directly from Adobe apps without it taking forever?
2.) Is there anything I can do to stop Adobe programs from running so slow?
I wrote a couple of simple scripts to save open files locally, then file-copy them to a selected directory:
/*
Save Locally and Copy All Open Files to Network Folder v1-2.jsx
Stephen Marsh
v1.0 - 10th March 2025: Simple ExtendScript based file object copy, no GUI
v1.1 - 10th MCopy link to clipboard
Copied
Hi @rlaz.jpg, welcome to the community!
Could you let us know what version of Photoshop you’re using? One thing to check is that your scratch disks are set up correctly. Here’s a helpful guide:
https://adobe.ly/49pR4Nk
If that doesn't help, please share your System Info from Ps. You can find it in Photoshop under Help > System Info. Just copy the info to a text file and attach it to your response, or share it with us through Google Drive, WeTransfer, or another file-sharing platform.
Thanks!
Alek
Copy link to clipboard
Copied
Best practice is to always save directly to the internal drive, then perform a file-system copy to an external or network drive:
https://helpx.adobe.com/au/photoshop/kb/networks-removable-media-photoshop.html
Copy link to clipboard
Copied
I wrote a couple of simple scripts to save open files locally, then file-copy them to a selected directory:
/*
Save Locally and Copy All Open Files to Network Folder v1-2.jsx
Stephen Marsh
v1.0 - 10th March 2025: Simple ExtendScript based file object copy, no GUI
v1.1 - 10th March 2025: More complex platform dependent file copy, no GUI
v1.2 - 31st March 2025: Added a GUI and other features
https://community.adobe.com/t5/photoshop-ecosystem-discussions/photoshop-file-saving-errors/td-p/15648552
Info:
https://helpx.adobe.com/photoshop/kb/networks-removable-media-photoshop.html
Original discussion:
https://community.adobe.com/t5/photoshop-ecosystem-discussions/script-to-copy-the-name-of-multiple-open-documents-to-a-single-text-file/td-p/15201067
*/
#target photoshop;
// Check if there are any open documents
if (app.documents.length === 0) {
alert("A document must be open to run this script!");
exit();
}
// Create the main window
var mainWindow = new Window("dialog", "Save Locally and Copy All Open Files to Network Folder (v1.2)");
mainWindow.orientation = "column";
mainWindow.alignChildren = "left";
mainWindow.preferredSize.width = 500;
// Content panel/group
var panel = mainWindow.add("panel", undefined, ""); // Panel label
panel.orientation = "column";
panel.alignChildren = "left";
panel.margins = [10, 10, 10, 10];
panel.preferredSize.width = 500;
// Information text
var infoText = panel.add("statictext", undefined, "Note: Files will be overwritten if they already exist in the network folder.");
infoText.characters = 200;
infoText.preferredSize = [500, 20]; // Set width and height
// Add the document count label
var docCountLabel = panel.add("statictext", undefined, "Open document count: " + app.documents.length);
// Add the folder selection button
var folderSelectionGroup = panel.add("group");
folderSelectionGroup.orientation = "row";
folderSelectionGroup.alignChildren = "left";
var folderButton = folderSelectionGroup.add("button", undefined, "Select Network Folder");
// statictext or edittext for path
var folderLabel = folderSelectionGroup.add("statictext", undefined, "No folder selected", { truncate: "middle" });
//folderLabel.characters = 30;
folderLabel.preferredSize.width = 250;
// Add checkbox for saving files
var saveFilesCheckbox = panel.add("checkbox", undefined, "Save all open files before copying");
saveFilesCheckbox.value = true; // Default to checked
// Add Cancel and OK buttons
var buttonGroup = mainWindow.add("group");
buttonGroup.orientation = "row";
buttonGroup.alignment = "right";
var cancelButton = buttonGroup.add("button", undefined, "Cancel", { name: "cancel" });
var okButton = buttonGroup.add("button", undefined, "OK", { name: "ok" });
// Folder selection button click handler
folderButton.onClick = function () {
var destinationFolder = Folder.selectDialog("Select the destination folder");
if (destinationFolder) {
folderLabel.text = destinationFolder.fsName;
mainWindow.destinationFolder = destinationFolder;
} else {
folderLabel.text = "No folder selected";
mainWindow.destinationFolder = null;
}
};
// OK button click handler
okButton.onClick = function () {
if (mainWindow.destinationFolder) {
mainWindow.close(1);
// First save all open documents if the checkbox is checked
if (saveFilesCheckbox.value) {
saveAllOpenDocuments();
}
// Then copy the files
copyOpenFiles(mainWindow.destinationFolder);
} else {
alert("Please select a destination folder.");
}
};
// Cancel button click handler
cancelButton.onClick = function () {
mainWindow.close(0);
};
// Show the window
mainWindow.show();
function saveAllOpenDocuments() {
var savedCount = 0;
var unsavedCount = 0;
var currentActiveDoc = app.activeDocument; // Store the current active document
// First count how many unsaved documents we have
for (var i = 0; i < app.documents.length; i++) {
if (!app.documents[i].saved) {
unsavedCount++;
}
}
// If there are unsaved documents, ask for confirmation
if (unsavedCount > 0) {
var confirmSave = confirm("There are " + unsavedCount + " unsaved document(s). Do you want to save them?");
if (!confirmSave) {
return 0; // User canceled save operation
}
}
// Loop through and save each document
for (var i = 0; i < app.documents.length; i++) {
var doc = app.documents[i];
try {
// Make this document active before saving
app.activeDocument = doc;
// If the document has never been saved before, we need to prompt for location
if (doc.path.toString() === "") {
var saveFile = File.saveDialog("Save " + doc.name + " as:");
if (saveFile) {
doc.saveAs(saveFile);
savedCount++;
}
}
// Otherwise just save it
else if (!doc.saved) {
doc.save();
savedCount++;
}
} catch (e) {
alert("Error saving " + doc.name + ": " + e);
}
}
// Restore the original active document
try {
app.activeDocument = currentActiveDoc;
} catch (e) {
// If the original document was closed during the process, this might fail
// Just continue with whichever document is now active
}
return savedCount;
}
function copyOpenFiles(destinationFolder) {
var openDocs = app.documents.length;
// Loop over all open documents
for (var i = 0; i < app.documents.length; i++) {
var doc = app.documents[i];
var docPath = doc.fullName.fsName; // Get the full path of the document in the OS-specific format
//alert(docPath);
if (docPath) {
// If the file copy fails, alert to the user with the path of the file that failed to copy
if (!copyFile(docPath, destinationFolder.fsName)) {
alert("Failed to copy: " + docPath);
}
} else {
alert("Cannot copy " + doc.name + " because it has not been saved.");
}
}
var finalFileCount = getFileCount(destinationFolder);
var filesCopied = finalFileCount;
// End of script notification
app.beep();
alert("Script completed!" + "\r" +
"Open document count: " + openDocs + "\n" + "Files copied: " + filesCopied);
// Open the destination folder
destinationFolder.execute();
}
function getFileCount(folder) {
var files = folder.getFiles();
return files.length;
}
/*
Based on:
https://community.adobe.com/t5/photoshop-ecosystem-discussions/to-move-files-and-folders/td-p/8787869/page/2
by willcampbell7
*/
function copyFile(sourceFilePath, destinationFolderPath) {
var command;
var fileFrom = new File(new File(sourceFilePath).fsName);
var fileTo = new File(destinationFolderPath + "/" + fileFrom.name);
var folderTo = new Folder(destinationFolderPath);
if (!folderTo.exists) {
folderTo.create();
}
if (File.fs == "Macintosh") {
// First copy the file
command = "cp \"" + fileFrom.fsName + "\" \"" + fileTo.fsName + "\"";
app.system(command);
// Use a standalone AppleScript file for Finder comment copying
var scriptContent = 'tell application "Finder"\n' +
' set sourceFile to POSIX file "' + fileFrom.fsName.replace(/\\/g, "\\\\").replace(/"/g, "\\\"") + '" as alias\n' +
' set destFile to POSIX file "' + fileTo.fsName.replace(/\\/g, "\\\\").replace(/"/g, "\\\"") + '" as alias\n' +
' set commentText to comment of sourceFile\n' +
' if commentText is not "" then\n' +
' set comment of destFile to commentText\n' +
' end if\n' +
'end tell';
// Create a temporary AppleScript file
var scriptFile = new File("/tmp/copy_comment.applescript");
scriptFile.encoding = "UTF-8";
scriptFile.open("w");
scriptFile.write(scriptContent);
scriptFile.close();
// Execute the script with proper permissions
app.system("osascript /tmp/copy_comment.applescript");
// Clean up
app.system("rm /tmp/copy_comment.applescript");
} else if (File.fs == "Windows") {
command = "copy \"" + fileFrom.fsName + "\" \"" + fileTo.fsName + "\"";
app.system(command);
}
if (fileTo.exists) {
return true;
} else {
return false;
}
}
https://prepression.blogspot.com/2017/11/downloading-and-installing-adobe-scripts.html
Get ready! An upgraded Adobe Community experience is coming in January.
Learn more