217 lines
5.9 KiB
C#
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 |