File tree Expand file tree Collapse file tree 1 file changed +13
-3
lines changed
src/Files.Uwp/Filesystem/FilesystemOperations Expand file tree Collapse file tree 1 file changed +13
-3
lines changed Original file line number Diff line number Diff line change @@ -248,10 +248,20 @@ await DialogDisplayHelper.ShowDialogAsync(
248
248
{
249
249
var file = ( BaseStorageFile ) sourceResult ;
250
250
var fsResultCopy = new FilesystemResult < BaseStorageFile > ( null , FileSystemStatusCode . Generic ) ;
251
- if ( string . IsNullOrEmpty ( file . Path ) && collision != NameCollisionOption . ReplaceExisting )
251
+ if ( string . IsNullOrEmpty ( file . Path ) && collision == NameCollisionOption . GenerateUniqueName )
252
252
{
253
- // Microsoft bug! When dragging files from .zip, "GenerateUniqueName" option is not respected and the file gets overwritten
254
- fsResultCopy = await FilesystemTasks . Wrap ( ( ) => file . CopyAsync ( destinationResult . Result , Path . GetFileName ( file . Name ) , NameCollisionOption . FailIfExists ) . AsTask ( ) ) ;
253
+ // If collision is GenerateUniqueName we will manually check for existing file and generate a new name
254
+ // HACK: If file is dragged from zip file in windows explorer for example. The file path is empty and
255
+ // GenerateUniqueName isn't working correctly. Below is a possible solution.
256
+ var desiredNewName = Path . GetFileName ( file . Name ) ;
257
+ string nameWithoutExt = Path . GetFileNameWithoutExtension ( desiredNewName ) ;
258
+ string extension = Path . GetExtension ( desiredNewName ) ;
259
+ ushort attempt = 1 ;
260
+ do
261
+ {
262
+ fsResultCopy = await FilesystemTasks . Wrap ( ( ) => file . CopyAsync ( destinationResult . Result , desiredNewName , NameCollisionOption . FailIfExists ) . AsTask ( ) ) ;
263
+ desiredNewName = $ "{ nameWithoutExt } ({ attempt } ){ extension } ";
264
+ } while ( fsResultCopy . ErrorCode == FileSystemStatusCode . AlreadyExists && ++ attempt < 1024 ) ;
255
265
}
256
266
else
257
267
{
You can’t perform that action at this time.
0 commit comments