VB.NET
'Imports System.Windows.Forms
Dim files As New System.Collections.Specialized.StringCollection()
files.Add("C:\1.txt")
files.Add("C:\2.txt")
files.Add("C:\3.txt")
Clipboard.SetFileDropList(files)
C#//using System.Windows.Forms;
System.Collections.Specialized.StringCollection files =
new System.Collections.Specialized.StringCollection();
files.Add("C:\\1.txt");
files.Add("C:\\2.txt");
files.Add("C:\\3.txt");
Clipboard.SetFileDropList(files);
Clipboard.SetDataObjectでファイルをコピーする方法VB.NET
'Imports System.Windows.Forms
Dim fileNames As String() = {"C:\1.txt", "C:\2.txt", "C:\3.txt"}
Dim data = New DataObject(DataFormats.FileDrop, fileNames)
Clipboard.SetDataObject(data)
C#//using System.Windows.Forms;
string[] fileNames = {"C:\\1.txt", "C:\\2.txt", "C:\\3.txt"};
IDataObject data = new DataObject(DataFormats.FileDrop, fileNames);
Clipboard.SetDataObject(data);
DragDropEffectsでファイルの切り取りを行う方法VB.NET
'Imports System.Windows.Forms
Dim fileNames As String() = {"C:\1.txt", "C:\2.txt", "C:\3.txt"}
Dim data As IDataObject = New DataObject(DataFormats.FileDrop, fileNames)
Dim bs As Byte() = New Byte() {CByte(DragDropEffects.Move), 0, 0, 0}
Dim ms As System.IO.MemoryStream = New System.IO.MemoryStream(bs)
data.SetData("Preferred DropEffect", ms)
Clipboard.SetDataObject(data)
C#//using System.Windows.Forms;
string[] fileNames = { "C:\\1.txt", "C:\\2.txt", "C:\\3.txt" };
IDataObject data = new DataObject(DataFormats.FileDrop, fileNames);
byte[] bs = new byte[] { (byte)DragDropEffects.Move, 0, 0, 0 };
System.IO.MemoryStream ms = new System.IO.MemoryStream(bs);
data.SetData("Preferred DropEffect", ms);
Clipboard.SetDataObject(data);
コピーファイルのパスを取得する方法VB.NET
'Imports System.Windows.Forms
If Clipboard.ContainsFileDropList() Then
Dim files As System.Collections.Specialized.StringCollection = _
Clipboard.GetFileDropList()
Dim fileName As String
For Each fileName In files
Console.WriteLine(fileName)
Next fileName
End If
C#//using System.Windows.Forms;
if (Clipboard.ContainsFileDropList())
{
System.Collections.Specialized.StringCollection files =
Clipboard.GetFileDropList();
foreach (string fileName in files)
{
Console.WriteLine(fileName);
}
}
クリップボードからファイルパスを取得する方法VB.NET
'Imports System.Windows.Forms
Dim data As IDataObject = Clipboard.GetDataObject()
If data.GetDataPresent(DataFormats.FileDrop) Then
Dim fileNames As String() = _
CType(data.GetData(DataFormats.FileDrop), String())
Dim fileName As String
For Each fileName In fileNames
Console.WriteLine(fileName)
Next fileName
End If
C#//using System.Windows.Forms;
IDataObject data = Clipboard.GetDataObject();
if (data.GetDataPresent(DataFormats.FileDrop))
{
string[] fileNames = (string[]) data.GetData(DataFormats.FileDrop);
foreach (string fileName in fileNames)
{
Console.WriteLine(fileName);
}
}
ファイルを実際に移動(コピー)する方法VB.NET
Public Shared Sub PasteFiles(ByVal destDir As String)
Dim data As IDataObject = Clipboard.GetDataObject()
If Not data Is Nothing AndAlso data.GetDataPresent(DataFormats.FileDrop) Then
Dim files As String() = DirectCast(data.GetData(DataFormats.FileDrop), String())
Dim dde As DragDropEffects = GetPreferredDropEffect(data)
If dde = (DragDropEffects.Copy Or DragDropEffects.Link) Then
CopyFilesToDirectory(files, destDir, False)
ElseIf dde = DragDropEffects.Move Then
CopyFilesToDirectory(files, destDir, True)
End If
End If
End Sub
Public Shared Function GetPreferredDropEffect(ByVal data As IDataObject) As DragDropEffects
Dim dde As DragDropEffects = DragDropEffects.None
If Not data Is Nothing Then
Dim ms As System.IO.MemoryStream = _
DirectCast(data.GetData("Preferred DropEffect"), System.IO.MemoryStream)
If ms IsNot Nothing Then
dde = DirectCast(ms.ReadByte(), DragDropEffects)
If dde = (DragDropEffects.Copy Or DragDropEffects.Link) Then
Console.WriteLine("コピー")
ElseIf dde = DragDropEffects.Move Then
Console.WriteLine("切り取り")
End If
End If
End If
Return dde
End Function
Public Shared Sub CopyFilesToDirectory(ByVal sourceFiles As String(), _
ByVal destDir As String, ByVal move As Boolean)
For Each sourcePath As String In sourceFiles
Dim destName As String = System.IO.Path.GetFileName(sourcePath)
Dim destPath As String = System.IO.Path.Combine(destDir, destName)
If Not move Then
System.IO.File.Copy(sourcePath, destPath)
Else
System.IO.File.Move(sourcePath, destPath)
End If
Next
End Sub
C#public static void PasteFiles(string destDir)
{
IDataObject data = Clipboard.GetDataObject();
if (data != null && data.GetDataPresent(DataFormats.FileDrop))
{
string[] files = (string[])data.GetData(DataFormats.FileDrop);
DragDropEffects dde = GetPreferredDropEffect(data);
if (dde == (DragDropEffects.Copy | DragDropEffects.Link))
{
CopyFilesToDirectory(files, destDir, false);
}
else if (dde == DragDropEffects.Move)
{
CopyFilesToDirectory(files, destDir, true);
}
}
}
public static DragDropEffects GetPreferredDropEffect(IDataObject data)
{
DragDropEffects dde = DragDropEffects.None;
if (data != null)
{
System.IO.MemoryStream ms =
(System.IO.MemoryStream)data.GetData("Preferred DropEffect");
if (ms != null)
{
dde = (DragDropEffects)ms.ReadByte();
if (dde == (DragDropEffects.Copy | DragDropEffects.Link))
{
Console.WriteLine("コピー");
}
else if (dde == DragDropEffects.Move)
{
Console.WriteLine("切り取り");
}
}
}
return dde;
}
public static void CopyFilesToDirectory(string[] sourceFiles, string destDir, bool move)
{
foreach (string sourcePath in sourceFiles)
{
string destName = System.IO.Path.GetFileName(sourcePath);
string destPath = System.IO.Path.Combine(destDir, destName);
if (!move)
{
System.IO.File.Copy(sourcePath, destPath);
}
else
{
System.IO.File.Move(sourcePath, destPath);
}
}
}