Skip to content

Commit

Permalink
Optimized DirectoryWrapperBase
Browse files Browse the repository at this point in the history
  • Loading branch information
Simnico99 committed Jan 26, 2023
1 parent 40fa34e commit 1c5348e
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 45 deletions.
65 changes: 24 additions & 41 deletions src/ZirconNet.Core/IO/DirectoryWrapperBase.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using System.Security.AccessControl;
using System.Linq;
using System.Security.AccessControl;
using System.Threading.Tasks;

namespace ZirconNet.Core.IO;
#if NET5_0_OR_GREATER
Expand Down Expand Up @@ -35,51 +37,46 @@ private static DirectoryInfo Create(string path, bool overwrite = false)

public async Task CopyContentAsync(IDirectoryWrapperBase destination)
{
if (_directoryInfo is not null)
if (_directoryInfo != null)
{
foreach (var file in _directoryInfo.GetFiles())
var directoriesQueue = new Queue<DirectoryInfo>();
directoriesQueue.Enqueue(_directoryInfo);
while (directoriesQueue.Count > 0)
{
var fileWrapper = new FileWrapper(file);
CopyingFile.Publish(fileWrapper);
await fileWrapper.CopyToDirectoryAsync(destination);
CopiedFile.Publish(fileWrapper);
}

foreach (var folder in _directoryInfo.GetDirectories())
{
var folderModel = new DirectoryWrapper(folder, false);

using (folderModel.CopyingFile.Subscribe(CopyingFile.Publish))
using (folderModel.CopiedFile.Subscribe(CopiedFile.Publish))
var currentDirectory = directoriesQueue.Dequeue();
var files = currentDirectory.GetFiles();
foreach (var file in files)
{
await folderModel.CopyContentAsync(destination);
var fileWrapper = new FileWrapper(file);
CopyingFile.Publish(fileWrapper);
await fileWrapper.CopyToDirectoryAsync(destination);
CopiedFile.Publish(fileWrapper);
}
var subdirectories = currentDirectory.GetDirectories();
foreach (var subdirectory in subdirectories)
{
directoriesQueue.Enqueue(subdirectory);
}
}
}
}

public override void Delete()
{
if (_directoryInfo is not null && Exists)
if (_directoryInfo != null && Exists)
{
_directoryInfo.Delete(true);
}
}

public IEnumerable<IFileWrapperBase> EnumerateFiles()
{
foreach (var file in _directoryInfo.EnumerateFiles())
{
yield return new FileWrapper(file, false);
}
return _directoryInfo.EnumerateFiles().Select(file => new FileWrapper(file, false));
}

public IEnumerable<IDirectoryWrapperBase> EnumerateDirectories()
{
foreach (var directory in _directoryInfo.EnumerateDirectories())
{
yield return new DirectoryWrapper(directory, false);
}
return _directoryInfo.EnumerateDirectories().Select(directory => new DirectoryWrapper(directory, false));
}

public IEnumerable<FileSystemInfo> EnumerateFileSystemInfos()
Expand All @@ -89,26 +86,12 @@ public IEnumerable<FileSystemInfo> EnumerateFileSystemInfos()

public IDirectoryWrapperBase[] GetDirectories()
{
var directoryWrappers = new DirectoryWrapper[_directoryInfo.GetDirectories().Length];
var directoryInfos = _directoryInfo.GetDirectories();
for (var i = 0; i < directoryInfos.Length; i++)
{
var directoryInfo = directoryInfos[i];
directoryWrappers[i] = new DirectoryWrapper(directoryInfo, false);
}
return directoryWrappers;
return _directoryInfo.GetDirectories().Select(d => new DirectoryWrapper(d, false)).ToArray();
}

public IFileWrapperBase[] GetFiles()
{
var fileWrappers = new FileWrapper[_directoryInfo.GetFiles().Length];
var filedInfos = _directoryInfo.GetFiles();
for (var i = 0; i < filedInfos.Length; i++)
{
var fileInfo = filedInfos[i];
fileWrappers[i] = new FileWrapper(fileInfo, false);
}
return fileWrappers;
return _directoryInfo.GetFiles().Select(f => new FileWrapper(f, false)).ToArray();
}

public DirectorySecurity GetAccessControl()
Expand Down
7 changes: 3 additions & 4 deletions src/ZirconNet.Core/IO/ZipFileWrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,11 @@ public async Task UnzipAsync(string extractionPath)

Extracting.Publish(extractionName);

if (File.Exists(extractionPathFullName))
using (var stream = zipArchiveEntry.Open())
using (var fileStream = File.Create(extractionPathFullName))
{
File.Delete(extractionPathFullName);
await stream.CopyToAsync(fileStream);
}

await Task.Run(() => zipArchiveEntry.ExtractToFile(extractionPathFullName));
Extracted.Publish(extractionName);
}
else
Expand Down

0 comments on commit 1c5348e

Please sign in to comment.