.NET でゴミ箱を使う
Win32 SDK なら SendToRecycleBin という関数でゴミ箱に捨てることができた。
しかし .NET Framework はプラットホームに依存しないという大義名分があるため方法が用意されていない。
ように思われますが依存性バリバリな名前空間である Microsoft.VisualBasic に密かに用意されている。
別に P/Invoke を利用してもいいけど C# からでも IronPython からでも使えるので使ってしまえです。
しかし .NET Framework はプラットホームに依存しないという大義名分があるため方法が用意されていない。
ように思われますが依存性バリバリな名前空間である Microsoft.VisualBasic に密かに用意されている。
別に P/Invoke を利用してもいいけど C# からでも IronPython からでも使えるので使ってしまえです。
Window に Drop したファイルをゴミ箱へ
FileSystem クラス (Microsoft.VisualBasic.FileIO)
VB.net からは My から辿れるけどやれることは同じである。
My.Computer.FileSystem オブジェクト
ココでは IronPython から使うコードを書きますが C# からでも解りやすいように。
ライブラリ参照として Microsoft.VisualBasic を追加する。
Microsoft.VisualBasic.FileIO 名前空間以下を利用する。
FileSystem.DeleteFile は static メソッドなのでインスタンス作成の必要は無い。
三番目の引数に RecycleOption 列挙体の SendToRecycleBin を指定する。
という感じで利用できます。
と、たったこれだけのコードで複数ファイルドロップ対応のゴミ箱移動アプリが作れます。
VB.net からは My から辿れるけどやれることは同じである。
My.Computer.FileSystem オブジェクト
ココでは IronPython から使うコードを書きますが C# からでも解りやすいように。
ライブラリ参照として Microsoft.VisualBasic を追加する。
Microsoft.VisualBasic.FileIO 名前空間以下を利用する。
FileSystem.DeleteFile は static メソッドなのでインスタンス作成の必要は無い。
三番目の引数に RecycleOption 列挙体の SendToRecycleBin を指定する。
という感じで利用できます。
# -*- coding: UTF-8 -*-
import clr
clr.AddReferenceByPartialName("PresentationCore")
clr.AddReferenceByPartialName("PresentationFramework")
clr.AddReferenceByPartialName("WindowsBase")
# namespace Microsoft は PresentationCore にあるけど…
clr.AddReference("Microsoft.VisualBasic")
from System import *
from System.Windows import *
from Microsoft.VisualBasic.FileIO import *
class SendToRecycleBin(Window):
"""
ファイルをドロップするとゴミ箱へ移動させる WPF Window
"""
def __init__(self):
self.Width = 320
self.Height = 240
self.Title = "SendToRecycleBin"
self.AllowDrop = True
self.Drop += self.on_drop
def on_drop(self, sender, e):
files = e.Data.GetData(DataFormats.FileDrop)
for f in files:
FileSystem.DeleteFile(
f,
UIOption.OnlyErrorDialogs,
RecycleOption.SendToRecycleBin
)
if __name__ == "__main__":
a = Application()
a.Run(SendToRecycleBin())と、たったこれだけのコードで複数ファイルドロップ対応のゴミ箱移動アプリが作れます。
Copyright(C) sasakima-nao All rights reserved 2002 --- 2025.