2013-10-24 2 views
0

디지털 카메라에서 이미지를 복사 한 다음 삭제하고 싶습니다. USB를 통해 PC에 연결된 3 개의 디지털 카메라가 있습니다.지정된 디지털 카메라에서 파일 가져 오기

PC는 이러한 장치를보고 드라이브로 추가합니다. 드라이브에서 이미지를 복사 할 수 있습니다. 이미지를 복사 할 때 whe를 알아야합니다. 카메라의 드라이브가 변경 될 수 있습니다. 그것은 어떤 카메라가 더 일찍 읽고 PC에 추가 될지에 달려 있습니다.

어떻게 카메라를 식별하고 카메라에서 파일을 복사해야합니까? 그들이 이동식 디스크 인 측면에서 그들과 함께 다루기

+0

1. 전체 드라이브를 복사하지 않는 이유는 무엇입니까? 2. ['DriveInfo'] (http://msdn.microsoft.com/en-us/library/system.io.driveinfo.getdrives.aspx)와 스위치를 사용할 수 있습니다. 3. 디렉터리 구조 등을 구문 분석하십시오. 4. [this] (http://stackoverflow.com/questions/9038697/get-serial-number-of-boot-drive-and-other- info)를 사용하여 일련 번호를 가져옵니다. – UIlrvnd

+0

1. 복사 할 수 있지만 카메라를 식별해야합니다. 2. 나는 아직 사용하지 않았습니다. 질문이었습니다. 무엇을해야합니까? 3. 나는 정말로 이해하지 못하지만, const 문자열에 대해 생각하지 않기를 바랍니다. 4. 나는 그것을 검사 할 것이다 – user1693057

답변

0

는 먼저 자신이 더 복잡 될 것입니다 카메라를 확인 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 

를 사용하여 이동식 디스크를 찾는 상대적으로 쉽다. 오직 당신 만이 그들을 식별하는 방법을 정확히 알게 될 것이지만 WMI을 통해 System.Management을 사용하여 제안 할 것입니다. Here의 등 특정 속성을 통해 USB에 디지털 카메라를 찾을 수 ManagementObjectSearcher 클래스를 보여주는 기사와 같은 GUID, Name, 내가 정확히 기억한다면, 당신이 그렇게처럼 초기화 것이다 :

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 
     } 
    } 
} 
+0

나는 2 개의 질문이있을 것이다. 1. 첫 번째 예에서 예외가 발생했지만 장치가 준비되지 않았습니다. 이 장치는 Nikon D3000 카메라입니다. 2. 관리 디스크를 가지고 있고 파일을 가져올 수 있습니까? – user1693057

+0

첫 번째 문제는 LINQ의 조건에'x.IsReady'를 추가하여 해결됩니다 (저의 잘못으로이를 보여주기 위해 업데이트되었습니다). 그림 핸들을 가져온 직후 관리 개체 검색을 수행합니다. 그런 다음 파일을 삭제하는 데 사용한 것과 같은 종류의'foreach '를 사용하여 각 파일에 액세스 할 수 있습니다. –

+0

내 "제거 할 수있는 장치 (nikon d3200 카메라)"를 사용할 준비가되지 않을까 걱정됩니다. 나는 그것을 위해 무엇인가 할 수 있습니까? 나는 api http://dotnet.dzone.com/articles/windows-portable-devices를 사용하려고 시도하지만 COM 예외가 있습니다. – user1693057

관련 문제