【问题标题】:Get files from specified digital camera从指定的数码相机获取文件
【发布时间】:2023-03-28 10:13:01
【问题描述】:

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

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

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

【问题讨论】:

  • 1.为什么不复制整个驱动器? 2.你可以使用DriveInfo和开关。 3.解析目录结构等... 4.使用this之类的东西来获取序列号。
  • 1.我可以复制,但我还必须识别相机。 2.我还没用过,有人问,我应该怎么做。 3.我不是很明白,但希望你不要想const字符串。 4. 我去看看

标签: c# .net wpf file-io usb


【解决方案1】:

将它们作为可移动磁盘处理相对容易,首先使用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 使用WMIHere 是一篇演示 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
        }
    }
}

【讨论】:

  • 我有 2 个问题。 1. 在第一个例子中我得到了一个异常,设备没有准备好。该设备是尼康 D3000 相机。 2.我如何获取文件之后我可以识别并获得ManagementObject?
  • 第一个是通过将x.IsReady 添加到 LINQ 中的条件来解决的(这是我的错误,已更新以显示这一点)。您将在获取图片句柄后立即进行管理对象搜索。然后,您可以使用与我删除文件时相同的foreach 访问每个文件。
  • 恐怕我的“可移动设备(尼康 d3200 相机)”永远无法使用。我能为它做点什么吗?我尝试使用 api dotnet.dzone.com/articles/windows-portable-devices,但出现 com in use 异常。
猜你喜欢
  • 2010-10-02
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多