Skip to content

Commit 446d7a9

Browse files
authored
Removed code to handle GenerateUniqueName bug (#9397)
1 parent d1e3572 commit 446d7a9

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/Files.Uwp/Filesystem/FilesystemOperations/FilesystemOperations.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,10 +248,20 @@ await DialogDisplayHelper.ShowDialogAsync(
248248
{
249249
var file = (BaseStorageFile)sourceResult;
250250
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)
252252
{
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);
255265
}
256266
else
257267
{

0 commit comments

Comments
 (0)