파일을 읽고 중복 내용을 찾기 위해 내용의 해시를 계산하려고했습니다. 문제는 Windows 8
(또는 WinRT
또는 windows 응용 프로그램을 저장하지만 불려서 완전히 혼란 스럽습니다)입니다. System.IO
은 Windows.Storage
으로 바뀌 었습니다. 이는 다르게 동작하며 매우 혼란 스럽습니다. 공식 문서는 전혀 유용하지 않습니다. Windows 8의 파일 IO
var picker = new Windows.Storage.Pickers.FolderPicker();
picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.MusicLibrary;
picker.FileTypeFilter.Add("*");
var folder = await picker.PickSingleFolderAsync();
var files = await folder.GetFilesAsync(Windows.Storage.Search.CommonFileQuery.OrderByName);
지금 파일에 내가 인덱스에 필요한 파일의 목록을 가지고 :
먼저 내 경우에는 내가 파일 선택기에서 폴더를 탐색에서 얻을 StorageFile 개체를 얻을 필요가있다. 다음으로, 해당 파일을 열 필요가 : 파일에서 데이터를 가져 오는 :
foreach (StorageFile file in files)
{
var filestream = file.OpenAsync(Windows.Storage.FileAccessMode.Read);
지금 가장 혼란스러운 부분이다. 설명서가 쓸모 없어서 코드 예제를 찾을 수 없었습니다. 분명히 Microsoft는 파일을 여는 것보다 카메라에서 사진을 가져 오는 것이 더 중요하다고 생각했습니다.
파일 스트림에는 데이터를 읽는 것으로 생각되는 부재 ReadAsync
이 있습니다. 이 메서드는 매개 변수로 버퍼를 필요로하고 다른 버퍼 (???)를 반환합니다. 그래서 버퍼를 만듭니다 :
var buffer = new Windows.Storage.Streams.Buffer(1024 * 1024 * 10); // 10 mb should be enough for an mp3
var resultbuffer = await filestream.ReadAsync(buffer, 1024 * 1024 * 10, Windows.Storage.Streams.InputStreamOptions.ReadAhead);
나는 파일에 충분한 바이트가없는 경우 어떻게됩니까? 나는 문서에 어떤 정보도 보지 못했다.
이제이 파일의 해시를 계산해야합니다. ..., 내가 알고리즘 객체를 생성 할 필요가 수행
var alg = Windows.Security.Criptography.Core.HashAlgorithmProvider.OpenAlgorithm("md5");
var hashbuff = alg.HashData(resultbuffer);
// Cleanup
filestream.Dispose();
나는 또한 덩어리에서 파일을 읽을 생각하지만, 어떻게 같은 해시를 계산할 수
? 나는 문서에서 사방을 보았고 이것에 대해서는 아무것도 발견하지 못했습니다. CryptographicHash 클래스 유형이 '추가'메소드 일 수 있습니까?
이제 다른 문제가 있습니다. 어떻게 이상한 버퍼로부터 바이트 배열로 데이터를 가져올 수 있습니까? IBuffer 클래스에는 'GetData'멤버가 없으므로 문서가 다시 쓸모가 없습니다.
그래서 내가 지금 할 수있는 모든 내가이 작업을 수행 할 수있는 방법 ...
// ???
}
그래서 질문은 ... 우주의 신비에 대해 궁금해? 나는 완전히 혼란 스럽다. 그래서 나는 왜 마이크로 소프트가 파일을 읽도록 선택했는지 궁금하다 ... 그래서 ... 불가능하다! 총회 때조차도이 일보다 더 쉽게 이해할 수있었습니다.
이 비슷한 질문보기 : http://stackoverflow.com/questions/12703816/how-to-read-file-metro-winrt/12704209#12704209 –
[MSDN Magazine의 Windows 8 스페셜 에디션] (http : // msdn.microsoft.com/en-us/magazine/ee310108.aspx). 유용한 예제가 많이 있습니다. –