Fix long file path handling on Windows when downloading to temporary locations #3226
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
AzCopy fails to download files with long paths on Windows systems that have long filename support enabled. The issue occurs because temporary download paths are not converted to use Windows extended path format (
\\?\prefix), while the final destination paths already use this format correctly.Problem
When
AZCOPY_DOWNLOAD_TO_TEMP_PATH=true(the default), AzCopy downloads files to temporary locations with names like.azDownload-<jobID>-<filename>before renaming them to the final destination. However, these temporary paths were constructed usingfilepath.Join()without applying the Windows long path prefix, causing file creation to fail with:Solution
Modified the
getDownloadPath()function inste/xfer-remoteToLocal-file.goto ensure temporary download paths also use the Windows extended path format by applyingcommon.ToExtendedPath()to the constructed temporary path.Before:
After:
This ensures both temporary and final destination paths consistently use the
\\?\prefix format that Windows requires for paths exceeding 260 characters.Testing
Added comprehensive unit tests covering:
The fix is cross-platform safe as
ToExtendedPath()only applies the extended format on Windows and returns paths unchanged on other operating systems.Fixes #3210.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.