このコードを使用して、ドラッグされたファイルをフォームにキャプチャし、特定のフォルダーにコピーしています (コピープロセスを省略しましたが、使用しています-FileSystem.CopyDirectory(copyFileDetails.Dir.FullName, copyFileDetails.Target, UIOption.AllDialogs); and FileSystem.CopyFile(file, newFileName, UIOption.AllDialogs);
this.DragEnter += new DragEventHandler(Form1_DragEnter);
this.DragDrop += new DragEventHandler(Form1_DragDrop);
private void Form1_DragEnter(object sender, DragEventArgs e)
{
//string action = e.Data.ToString();
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
else if (e.Data.GetDataPresent("FileGroupDescriptorW"))
{
System.IO.MemoryStream info = e.Data.GetData("FileGroupDescriptor") as System.IO.MemoryStream;
System.IO.MemoryStream content = e.Data.GetData("FileGroupDescriptorW") as System.IO.MemoryStream;
e.Effect = DragDropEffects.Copy;
}
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
}
else if (e.Data.GetDataPresent("FileGroupDescriptorW"))
{
System.IO.MemoryStream info = e.Data.GetData("FileGroupDescriptor") as System.IO.MemoryStream;
System.IO.MemoryStream content = e.Data.GetData("FileGroupDescriptorW") as System.IO.MemoryStream;
ClipboardMemoryStream = (MemoryStream)e.Data.GetData("FileGroupDescriptorW", true);
byteArray = ClipboardMemoryStream.ToArray();
// TODO: Read data from stream
}
}
ファイルをフォームにドラッグすると、ファイル名 (string[] ファイル) が取得され、ハード ディスク ドライブにコピーするのに問題はありません。
しかし、デバイス (カメラなど) からファイルをドラッグすると、元のファイルと同じ名前のファイルに変換する方法がわからないファイルストリームが得られます。また、大きなファイルとフォルダーをサポートするためにもこれが必要です。
これを実装するにはどうすればよいですか?