diff --git a/Shell.cs b/Shell.cs
index e50c6dc2..dee96483 100644
--- a/Shell.cs
+++ b/Shell.cs
@@ -24,36 +24,80 @@
//
using System;
-using System.Text;
+using System.IO;
+//using System.Text;
using System.Runtime.InteropServices;
-namespace Rnd.Shell
+namespace GARbro.Shell
{
///
- /// Wrapper around PathCreateFromUrl WINAPI call.
+ /// Wrapper around MoveFileEx WINAPI call.
///
- class PathConverter
+ class File
{
- [DllImport("shlwapi.dll", EntryPoint="PathCreateFromUrlW", CharSet=CharSet.Unicode, SetLastError=true)]
- private static extern Int32 PathCreateFromUrl(
- string url, StringBuilder path,
- ref Int32 size, UInt32 flags);
+ [DllImport("kernel32.dll", EntryPoint="MoveFileExW", SetLastError=true, CharSet=CharSet.Unicode)]
+ public static extern bool MoveFileEx (string lpExistingFileName, string lpNewFileName, MoveFileFlags dwFlags);
- private StringBuilder buf;
- private Int32 size;
-
- public PathConverter (int capacity = 260)
+ [Flags]
+ public enum MoveFileFlags : uint
{
- buf = new StringBuilder (capacity);
+ ReplaceExisting = 0x00000001,
+ CopyAllowed = 0x00000002,
+ DelayUntilReboot = 0x00000004,
+ WriteThrough = 0x00000008,
+ CreateHardlink = 0x00000010,
+ FailIfNotTrackable = 0x00000020
}
- public string UrlToPath (string url)
+
+ public static bool Rename (string szFrom, string szTo)
{
- size = buf.Capacity;
- Int32 rc = PathCreateFromUrl (url, buf, ref size, 0);
- return rc == 0 ? buf.ToString (0, size) : "";
+ return MoveFileEx (szFrom, szTo, MoveFileFlags.ReplaceExisting);
}
}
+ public class TemporaryFile : IDisposable
+ {
+ private string m_name;
+ public string Name { get { return m_name; } }
+
+ public TemporaryFile ()
+ {
+ m_name = Path.GetRandomFileName();
+ }
+
+ public TemporaryFile (string filename)
+ {
+ m_name = filename;
+ }
+
+ public TemporaryFile (string path, string filename)
+ {
+ m_name = Path.Combine (path, filename);
+ }
+
+ #region IDisposable Members
+ bool disposed = false;
+
+ public void Dispose ()
+ {
+ Dispose (true);
+ GC.SuppressFinalize (this);
+ }
+
+ protected virtual void Dispose (bool disposing)
+ {
+ if (!disposed)
+ {
+ if (disposing)
+ {
+ System.IO.File.Delete (m_name);
+ }
+ disposed = true;
+ }
+ }
+ #endregion
+ };
+
///
/// Wrapper around SHGetFileInfo WINAPI call.
///
@@ -154,29 +198,4 @@ namespace Rnd.Shell
return result != 0? new Nullable (info): null;
}
}
-
- ///
- /// Wrapper around MoveFileEx WINAPI call.
- ///
- class File
- {
- [DllImport("kernel32.dll", EntryPoint="MoveFileExW", SetLastError=true, CharSet=CharSet.Unicode)]
- public static extern bool MoveFileEx (string lpExistingFileName, string lpNewFileName, MoveFileFlags dwFlags);
-
- [Flags]
- public enum MoveFileFlags : uint
- {
- ReplaceExisting = 0x00000001,
- CopyAllowed = 0x00000002,
- DelayUntilReboot = 0x00000004,
- WriteThrough = 0x00000008,
- CreateHardlink = 0x00000010,
- FailIfNotTrackable = 0x00000020
- }
-
- public static bool Rename (string szFrom, string szTo)
- {
- return MoveFileEx (szFrom, szTo, MoveFileFlags.ReplaceExisting);
- }
- }
}