从指定的数码相机获取文件

本文关键字:获取 文件 数码相机 | 更新日期: 2023-09-27 18:36:40

我想复制然后从我的数码相机中删除图像。有3个数码相机通过USB连接到PC。

电脑会看到这些设备,并将其添加为驱动器。我可以从驱动器复制图像,只是我必须知道我从中复制图像。相机的驱动器可以改变。这取决于哪个相机将被读取并更早地添加到PC。

我应该如何识别相机并从中复制文件。

从指定的数码相机获取文件

将它们

作为可移动磁盘来处理相对容易,首先使用 DriveInfo 查找可移动磁盘

// Find removable disks
var drives = DriveInfo.GetDrives().Where(x => x.DriveType == DriveType.Removable && x.IsReady);
List<FileInfo[]> pictureHandles = new List<FileInfo[]>();
// Find all files of a certain type on each drive
foreach(var drive in drives)
{
    pictureHandles.Add(
                new DirectoryInfo(drive.Name)
                .GetFiles("*.jpg",SearchOption.AllDirectories)
                .ToArray());
}
// Do stuff with pictureHandles and identify
// which drive is which camera using System.Management

识别相机本身将更加复杂。只有你会确切地知道如何识别它们,但我建议通过System.Management使用WMI。这是一篇演示ManagementObjectSearcher类的文章,您可以在其中通过某些属性(例如GUIDName等)在USB上查找数码相机。如果我没记错的话,你会这样初始化它:

var searcher = new ManagementObjectSearcher("SELECT * FROM WIN32_USB");

然后遍历,

foreach(var device in searcher.Get())

并检查属性:

if(device["Name"].ToString().Equals("My Digital Camera"))

最后,当您对文件执行了要执行的操作后,可以像这样删除它们:

foreach(FileInfo[] files in pictureHandles)
{
    for (int i = 0; i < files.Length; i++)
    {
        try 
        { 
            File.Delete(files[i].FullName); 
        }
        catch(Exception ex)
        {
            // Failed to delete
        }
    }
}