c#将文件复制到指定路径

c#将文件复制到指定路径,c#,listbox,clipboard,C#,Listbox,Clipboard,ı将我的文件发送到剪贴板,ı希望复制所有指定路径的文件,例如单击一个按钮“桌面”,但我有问题等文档ı无法从列表框获取所有文件,ı不复制指定路径ı如何复制所有文件 public partial class Form1 : Form { [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern IntPtr SetClipboardViewer(IntPtr hWnd); [DllImport

ı将我的文件发送到剪贴板,ı希望复制所有指定路径的文件,例如单击一个按钮“桌面”,但我有问题等文档ı无法从列表框获取所有文件,ı不复制指定路径ı如何复制所有文件

public partial class Form1 : Form
{
    [DllImport("User32.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr SetClipboardViewer(IntPtr hWnd);
    [DllImport("User32.dll", CharSet = CharSet.Auto)]
    public static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext);
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);

    IntPtr SonrakiClipboardOgesi;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        SonrakiClipboardOgesi = SetClipboardViewer(this.Handle);
    }

    protected override void WndProc(ref Message m)
    {
        int WM_DRAWCLIPBOARD = 0x0308;
        int WM_CHANGECBCHAIN = 0x030D;

        if (m.Msg == WM_DRAWCLIPBOARD)
        {
            ClipboardRead();
            SendMessage(SonrakiClipboardOgesi, m.Msg, m.WParam, m.LParam);
        }
        else if (m.Msg == WM_CHANGECBCHAIN) 
        {
            if (m.WParam == SonrakiClipboardOgesi)
            {
                SonrakiClipboardOgesi = m.LParam;
            }
            else
            {
                SendMessage(SonrakiClipboardOgesi, m.Msg, m.WParam, m.LParam);
            }
        }

        base.WndProc(ref m);
    }

    private void ClipboardRead()
    {
        StringCollection col = new StringCollection();
        col = Clipboard.GetFileDropList();
        for (int i = 0; i < col.Count; i++)
        {
            listBox1.Items.Add(col[i]);
        }
        listBox1.SelectionMode = SelectionMode.MultiSimple;
        for (int i = 0; i < listBox1.Items.Count; i++)
        {
            listBox1.SetSelected(i, true);
        }
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        ChangeClipboardChain(this.Handle, SonrakiClipboardOgesi);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // ı make a with click copy within listbox files specified path 
        //What code I should write here 
    }
}
公共部分类表单1:表单
{
[DllImport(“User32.dll”,CharSet=CharSet.Auto)]
公共静态外部IntPtr SetClipboardViewer(IntPtr hWnd);
[DllImport(“User32.dll”,CharSet=CharSet.Auto)]
公共静态外部bool changebloardchain(IntPtr hWndRemove、IntPtr hWndNewNext);
[DllImport(“user32.dll”,CharSet=CharSet.Auto)]
公共静态外部int SendMessage(IntPtr hwnd、int wMsg、IntPtr wParam、IntPtr lParam);
IntPtr SonrakiClipboardOgesi;
公共表格1()
{
初始化组件();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
SonrakiClipboardOgesi=SetClipboardViewer(this.Handle);
}
受保护的覆盖无效WndProc(参考消息m)
{
int WM_DRAWCLIPBOARD=0x0308;
int WM_CHANGECBCHAIN=0x030D;
如果(m.Msg==WM_)
{
剪贴簿();
SendMessage(SonrakiClipboardOgesi、m.Msg、m.WParam、m.LParam);
}
else if(m.Msg==WM_CHANGECBCHAIN)
{
如果(m.WParam==SonrakiClipboardOgesi)
{
SonrakiClipboardOgesi=m.LParam;
}
其他的
{
SendMessage(SonrakiClipboardOgesi、m.Msg、m.WParam、m.LParam);
}
}
基准WndProc(参考m);
}
私有无效剪贴簿()
{
StringCollection col=新的StringCollection();
col=Clipboard.GetFileDropList();
for(int i=0;i
如果你有一个按钮点击事件,你不需要听剪贴板,所以你尝试做的有点多余

if (Clipboard.ContainsFileDropList())
{
     // Get a list of files
     System.Collections.Specialized.StringCollection returnList = Clipboard.GetFileDropList();
     // For each file in the list
     foreach(string s in returnlist)
     {
         // split the file path and get the last node of the path which should be file.ext
         String[] sa = s.Split('\');
         string sourceFile = s;
         // set the file target
         string targetFile = Environment.GetFolderPath(Environment.SpecialFolder.Desktop))+sa[sa.length-1];
         // Get a list of files
         System.IO.File.Copy(sourceFile, destFile, true); // finally copy the file
     }
 }

您可能需要进行一些调试,因为我手头没有Visual Studio,而且我还没有检查它是否编译…

您已经问过这个问题,但我找不到任何地方。 无论如何,下面是如何将文件从列表框复制到桌面的代码:

foreach (string item in listBox1.Items)
{
    FileInfo fileInfo = new FileInfo(item);
    File.Copy(item,Path.Combine(
          Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
          fileInfo.Name), true);
 }

当然,若你们已经在桌面上有相同的文件,它会抛出异常。若要覆盖现有文件,您需要设置第三个文件。复制方法参数-请参阅“编辑的代码”。@leonf了解它的工作原理,然后调试它以使其适合您,不要期望得到复制粘贴代码的答案。您会说土耳其语吗?如果您知道,sevkiı会告诉您土耳其语??私有无效按钮1_单击(对象发送者,事件参数e){//ı在listbox文件指定路径中单击复制//我应该在此处编写什么代码}是的,我会,但坚持使用英语,以便其他人也能从中受益。将我在此处编写的代码插入代码中。