using System.IO;
using System.Runtime.InteropServices.ComTypes;
namespace SpaceEngineersBlueprintEditor.Installer.Utilities;
public static class FileHelper
{
public static string[] RootPath { get; set; } = [@"C:\", @"D:\", @"E:\", @"F:\", @"G:\", @"H:\", @"I:\", @"J:\", @"K:\", @"L:\", @"M:\", @"N:\", @"O:\", @"P:\", @"Q:\", @"R:\", @"S:\", @"T:\", @"U:\", @"V:\", @"W:\", @"X:\", @"Y:\", @"Z:\",];
public static long GetDirectorySize(DirectoryInfo directoryInfo)
{
long size = 0;
FileInfo[] files = directoryInfo.GetFiles();
foreach (FileInfo file in files)
{
size += file.Length;
}
DirectoryInfo[] directories = directoryInfo.GetDirectories();
foreach (DirectoryInfo directory in directories)
{
size += GetDirectorySize(directory);
}
return size;
}
public static bool IsRootPath(string path) => RootPath.Any(rootPath => rootPath == path);
public static bool CreateShortCut(string linkFilePath, string targetPath, string? arguments = null,
string? description = null, string? iconLocation = null, string? workingDirectory = null)
{
var info = new LinkFileInfo(targetPath, arguments, description, iconLocation)
{
WorkingDirectory = workingDirectory
};
return Write(linkFilePath, info, false);
}
private static bool Write(string linkFilePath, LinkFileInfo info, bool useExistsFile)
{
bool isSuccessful = false;
try
{
var shortcut = (IShellLink)new ShellLink();
var persistFile = shortcut as IPersistFile;
if (useExistsFile && System.IO.File.Exists(linkFilePath)) LoadPersistFile(persistFile, linkFilePath);
if (info.Arguments != null) shortcut.SetArguments(info.Arguments);
if (info.Description != null) shortcut.SetDescription(info.Description);
if (info.Hotkey != 0) shortcut.SetHotkey(info.Hotkey);
if (info.IconLocation != null) shortcut.SetIconLocation(info.IconLocation, info.IconLocationID);
if (info.TargetPath != null) shortcut.SetPath(info.TargetPath);
if (info.WindowStyle != -1) shortcut.SetShowCmd(info.WindowStyle);
if (info.WorkingDirectory != null) shortcut.SetWorkingDirectory(info.WorkingDirectory);
persistFile?.Save(linkFilePath, false);
isSuccessful = persistFile != null;
}
catch (Exception ex)
{
Console.WriteLine($"LinkFile write exception: {ex}");
}
return isSuccessful;
}
private static void LoadPersistFile(IPersistFile? persistFile, string linkFilePath)
{
try
{
const int STGM_SHARE_DENY_NONE = 0x00000040;
persistFile?.Load(linkFilePath, STGM_SHARE_DENY_NONE);
}
catch (Exception ex)
{
Console.WriteLine($"LinkFile load persist file exception: {ex}");
}
}
}
using System.IO;
using System.Runtime.InteropServices.ComTypes;
namespace SpaceEngineersBlueprintEditor.Installer.Utilities;
public static class FileHelper
{
public static string[] RootPath { get; set; } = [@"C:\", @"D:\", @"E:\", @"F:\", @"G:\", @"H:\", @"I:\", @"J:\", @"K:\", @"L:\", @"M:\", @"N:\", @"O:\", @"P:\", @"Q:\", @"R:\", @"S:\", @"T:\", @"U:\", @"V:\", @"W:\", @"X:\", @"Y:\", @"Z:\",];
public static long GetDirectorySize(DirectoryInfo directoryInfo)
{
long size = 0;
FileInfo[] files = directoryInfo.GetFiles();
foreach (FileInfo file in files)
{
size += file.Length;
}
DirectoryInfo[] directories = directoryInfo.GetDirectories();
foreach (DirectoryInfo directory in directories)
{
size += GetDirectorySize(directory);
}
return size;
}
public static bool IsRootPath(string path) => RootPath.Any(rootPath => rootPath == path);
public static bool CreateShortCut(string linkFilePath, string targetPath, string? arguments = null,
string? description = null, string? iconLocation = null, string? workingDirectory = null)
{
var info = new LinkFileInfo(targetPath, arguments, description, iconLocation)
{
WorkingDirectory = workingDirectory
};
return Write(linkFilePath, info, false);
}
private static bool Write(string linkFilePath, LinkFileInfo info, bool useExistsFile)
{
bool isSuccessful = false;
try
{
var shortcut = (IShellLink)new ShellLink();
var persistFile = shortcut as IPersistFile;
if (useExistsFile && System.IO.File.Exists(linkFilePath)) LoadPersistFile(persistFile, linkFilePath);
if (info.Arguments != null) shortcut.SetArguments(info.Arguments);
if (info.Description != null) shortcut.SetDescription(info.Description);
if (info.Hotkey != 0) shortcut.SetHotkey(info.Hotkey);
if (info.IconLocation != null) shortcut.SetIconLocation(info.IconLocation, info.IconLocationID);
if (info.TargetPath != null) shortcut.SetPath(info.TargetPath);
if (info.WindowStyle != -1) shortcut.SetShowCmd(info.WindowStyle);
if (info.WorkingDirectory != null) shortcut.SetWorkingDirectory(info.WorkingDirectory);
persistFile?.Save(linkFilePath, false);
isSuccessful = persistFile != null;
}
catch (Exception ex)
{
Console.WriteLine($"LinkFile write exception: {ex}");
}
return isSuccessful;
}
private static void LoadPersistFile(IPersistFile? persistFile, string linkFilePath)
{
try
{
const int STGM_SHARE_DENY_NONE = 0x00000040;
persistFile?.Load(linkFilePath, STGM_SHARE_DENY_NONE);
}
catch (Exception ex)
{
Console.WriteLine($"LinkFile load persist file exception: {ex}");
}
}
}