2012-05-07 3 views
6

에서 내가 짓고 있어요 데이터베이스 응용 프로그램에서 참조되는 파일에 대한 일부 동기화 정보를 저장하는 대체 데이터 스트림을 사용할 수 있도록하고 싶습니다.작업 C# 예 : 쓰기 및 읽기 NTFS 대체 데이터 스트림 Win7에 64 비트

그러나, 나는 웹에서 발견 한 모든 방법은 어떤 식 으로든에 실패했습니다. Win32 API 프로그래밍에 익숙하지 않은 이유는 왜 실패가 발생하는지 잘 모르겠습니다. 경우에 따라 메소드 호출이 성공한 것처럼 보일뿐 대체 스트림이 생성되지 않습니다 (예 : 대체 파일에서 나중에 읽을 수 없으며 AlternateStreamViewer가 볼 수 없음). 다른 경우에는 쓰기가 성공하지만 CreateFile()을 호출하면 SafeFileHandle이 유효하지 않기 때문에 읽기가 실패합니다. 난 그냥 몇 가지 작업 코드를 찾으려면이 시점에서

. 또는 "나중에 여기에 도착할 수 없습니다"라고 알려주십시오. 어떤 경우에는별로 매력이없는 또 다른 옵션을 사용합니다 (예 : 파일 이름 자체에 동기화/참조 정보를 인코딩하고 아무도 파일 이름을 변경하지 않기를 바랍니다).


내가 시도한 접근 방식에 대한 요청을 이해합니다. 그러나 꽤 많은 사람들이있었습니다 (나는 이것에 몇 시간을 보냈습니다). 나는 시도하지 않은 제물에 대해 정말로 배우고 싶었습니다. 아래에 언급 된 Trinet 일 - - 잘못이 나는 방법 중 하나를 사용하고 있었다 밝혀

는하지만, 그것은 도움이 한 것이 맞다. 문제는 내가 대체 스트림을 저장하려고하는 "기본"파일을 아직 만들지 않았다고 생각합니다. 나는이 라이브러리를 사용하여 Windows 7의 x64에 성공 했어

+0

http://stackoverflow.com/q/604960/102937 –

+0

당신이 시도 접근 방법의 일부에 질문 링크에 포함하십시오, 그리고 왜 그들은 실패했습니다. 그렇지 않으면, 우리는 당신을 똑같은 실패한 접근법으로 안내 할 것입니다. –

답변

5

:

는 여기에 내가 시도 코드베이스에 대한 링크입니다

https://github.com/hubkey/Trinet.Core.IO.Ntfs

내 예전의 코드를 찾을 수없는, 내가 북마크 한 문서 페이지 아래로 순간에, 그래서 나는 다시 문제가 계속되는 경우 최대 때 몇 가지 코드를 게시하려고합니다.

편집 : 당신은 또한 읽고 몇 줄의 코드에서 NTFS 대체 데이터 스트림을 작성, 목록을 지원하는 내 Platform.VirtualFileSystem 라이브러리를 시도 할 수 있습니다

using Trinet.Core.IO.Ntfs; 

var fileInfo = new FileInfo(@"C:\path\to\file.dat"); 
if (AlternateDataStreamExists("MyStreamName")) 
{ 
    var alternateStream = fileInfo.GetAlternateDataStream("MyStreamName").OpenRead(); 
} 
else 
{ 
    var alternateStream = fileInfo.GetAlternateDataStream("MyStreamName").OpenWrite(); 
} 
+1

당신이 그것을하는 방법을 안다면 그것은 간단합니다 :) 감사합니다, EvilPenguin! Trinet 솔루션을 사용해 보았지만 CodeProject 예제가 작성된 이후 라이브러리가 변경된 것으로 보이기 때문에 잘못된 접근 방식을 사용했습니다. 또한 문제가 될 수있는 "기본"파일을 만들기 전에 대체 스트림을 만들었습니다. 어쨌든 이제는 작동합니다! –

+0

나는 그 비트가 읽는 방법을 단지 깨달았다 :) 내가 도울 수있어서 기뻤다. – TheEvilPenguin