Files
tianrunCRM/Assets/BestHTTP/PlatformSupport/IO/Infos.cs
2020-07-09 08:50:24 +08:00

217 lines
5.9 KiB
C#

#if NETFX_CORE
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.IO;
using System.Linq;
using System.Text;
using Windows.Storage;
using Windows.Storage.Streams;
using Windows.Foundation;
namespace BestHTTP.PlatformSupport.IO
{
public abstract class FileSystemInfo
{
public FileAttributes Attributes
{
get
{
return this.GetAttributes();
}
}
public DateTime CreationTime
{
get
{
return this.GetCreationTime().DateTime;
}
}
public DateTime CreationTimeUtc
{
get
{
return this.GetCreationTime().ToUniversalTime().DateTime;
}
}
public abstract bool Exists { get; }
public string Extention
{
get
{
return Path.GetExtension(this.FullName);
}
}
public abstract string FullName { get; }
public abstract string Name { get; }
internal abstract FileAttributes GetAttributes();
internal abstract DateTimeOffset GetCreationTime();
public abstract void Delete();
public void Refresh()
{
this.RefreshInternal();
}
internal abstract void RefreshInternal();
}
public sealed class DirectoryInfo : FileSystemInfo
{
private string path;
private StorageFolder folder;
public override bool Exists
{
get
{
try
{
this.RefreshInternal();
return true;
}
catch
{
return false;
}
}
}
public override string FullName
{
get
{
return this.folder.Path;
}
}
public override string Name
{
get
{
return this.folder.Name;
}
}
public DirectoryInfo(string path)
{
if (path == null)
throw new ArgumentNullException();
if (string.IsNullOrWhiteSpace(path))
throw new ArgumentException();
try
{
this.path = path;
this.folder = FileHelper.GetFolderForPathOrURI(path);
}
catch (IOException ex)
{
System.Diagnostics.Debug.WriteLine("DirectoryInfo: " + ex.Message + "\n" + ex.StackTrace);
throw;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("DirectoryInfo: " + ex.Message + "\n" + ex.StackTrace);
throw new IOException(ex.Message, ex);
}
}
internal DirectoryInfo(string path, StorageFolder folder)
{
this.path = path;
this.folder = folder;
}
internal override FileAttributes GetAttributes()
{
try
{
return File.WinAttributesToSysAttributes(this.folder.Attributes);
}
catch (IOException ex)
{
System.Diagnostics.Debug.WriteLine("DirectoryInfo.GetAttributes: " + ex.Message + "\n" + ex.StackTrace);
throw;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("DirectoryInfo.GetAttributes: " + ex.Message + "\n" + ex.StackTrace);
throw new IOException(ex.Message, ex);
}
}
internal override DateTimeOffset GetCreationTime()
{
try
{
return this.folder.DateCreated;
}
catch (IOException ex)
{
System.Diagnostics.Debug.WriteLine("DirectoryInfo.GetCreationTime: " + ex.Message + "\n" + ex.StackTrace);
throw;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("DirectoryInfo.GetCreationTime: " + ex.Message + "\n" + ex.StackTrace);
throw new IOException(ex.Message, ex);
}
}
public override void Delete()
{
try
{
WindowsRuntimeSystemExtensions.AsTask(this.folder.DeleteAsync()).Wait();
}
catch (IOException ex)
{
System.Diagnostics.Debug.WriteLine("DirectoryInfo.Delete: " + ex.Message + "\n" + ex.StackTrace);
throw;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("DirectoryInfo.Delete: " + ex.Message + "\n" + ex.StackTrace);
throw new IOException(ex.Message, ex);
}
}
internal override void RefreshInternal()
{
try
{
this.folder = FileHelper.GetFolderForPathOrURI(this.path);
}
catch (IOException ex)
{
System.Diagnostics.Debug.WriteLine("DirectoryInfo.RefreshInternal: " + ex.Message + "\n" + ex.StackTrace);
throw;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("DirectoryInfo.RefreshInternal: " + ex.Message + "\n" + ex.StackTrace);
throw new IOException(ex.Message, ex);
}
}
public override string ToString()
{
return this.path;
}
public override int GetHashCode()
{
return this.path.GetHashCode();
}
}
}
#endif