Member 13019776 Ответов: 0

Как написать код C# для чтения и копирования данных с любого съемного устройства


Я хочу разработать приложение windows(используя C#) для копирования содержимого съемного устройства(подключенного через кабель передачи данных).Когда мы подключаем новое устройство, оно должно показывать обнаруженное сообщение, а также обеспечивать возможность считывания и копирования содержимого данных внутри этого устройства.

Что я уже пробовал:

Я использовал приведенный ниже код для обнаружения устройства, но он не показывает его содержимое
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DETECTUSB
{
    public partial class Form1 : Form
    {
        [StructLayout(LayoutKind.Sequential)]
        public struct DevBroadcastVolume
        {
            public int Size;
            public int DeviceType;
            public int Reserved;
            public int Mask;
            public Int16 Flags;
        }
        private const int WM_DEVICECHANGE = 0X219;
        private const int DBT_DEVICEARRIVAL = 0X8000;
        private const int DBT_DEVICEREMOVECOMPLETE = 0X8004;
        private const int DBT_DEVICETYP_VOLUME = 0X00000002;



        protected override void WndProc(ref Message m)
        {

            base.WndProc(ref m);
            switch (m.Msg)
            {
                case WM_DEVICECHANGE:
                    switch ((int)m.WParam)
                    {
                        case DBT_DEVICEARRIVAL:
                            listBox1.Items.Add("new device connected"); 
                            
                             int devType = Marshal.ReadInt32(m.LParam, 4);
                     if(devType == DBT_DEVICETYP_VOLUME)
                     {
                        DevBroadcastVolume vol;
                        vol = (DevBroadcastVolume)
                           Marshal.PtrToStructure(m.LParam,
                           typeof (DevBroadcastVolume));
                        listBox1.Items.Add("Mask is " + vol.Mask);
                     }
                            break;
                        case DBT_DEVICEREMOVECOMPLETE:
                            listBox1.Items.Add("device removed");
                            break;
                    }
                    break;
            }
        }
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}




Я использовал приведенный ниже код для извлечения содержимого съемного диска, но он не показывает содержимое съемного устройства
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog FBD = new FolderBrowserDialog();
            if (FBD.ShowDialog() == DialogResult.OK)
            {
                listBox1.Items.Clear();
                string[] files = Directory.GetFiles(FBD.SelectedPath);
                string[] dires = Directory.GetDirectories(FBD.SelectedPath);
                foreach (string file in files)
                {
                    listBox1.Items.Add(file);
                }
                foreach (string dir in dires)
                {
                    listBox1.Items.Add(dir);
                }
            }
        }
    }
}

Richard MacCutchan

Папки на съемных устройствах точно такие же, как и на стационарных устройствах. Вам нужно предоставить более подробную информацию.

0 Ответов