저장 및 스트림 객체를 열 수있는 COM 구조화 된 저장소 파일 판독기가 있습니다. 모두 만족합니다. 하지만 이제 한 아카이브에서 다른 아카이브로 사물을 복사하고 사물의 이름을 바꾼 다음 사물을 다시 디스크에 쓸 수 있기를 원합니다. 심지어 디스크에 변경 사항을 기록 할 수 없기 때문에 복사 및 이름 바꾸기 작업을 좋아하지도 않았습니다. 루트 IStorage 개체의 커밋 메서드를 호출하여 시도하고 잘 실행되는 것, 보이지만 변경 내용을 참조하십시오. 나는 이것을 C# .NET의 PInvoke를 통해 구현하고있다. 변경변경된 COM 구조적 저장소 파일을 디스크에 쓰는 방법은 무엇입니까?
ListArchive((archive.Root as StructuredStorageContainer), 0);
archive.Root.Name = "Fail";
archive.Save();
에게 StructuredStorageNode 클래스에 이름 정의를 만들기
public void Load(string path)
{
STATSTG[] storageElementInfos = new STATSTG[1];
// Populate our storage object
var result = StgOpenStorage(path, null, STGM.DIRECT | STGM.READWRITE | STGM.SHARE_EXCLUSIVE, IntPtr.Zero, 0, out archive);
// Only proceed if we succeed in populating our SS object
if (result == 0)
{
uint count;
IEnumSTATSTG elements;
archive.EnumElements(0, IntPtr.Zero, 0, out elements);
elements.Next(1, storageElementInfos, out count);
if (count != 0)
{
if ((STGTY)storageElementInfos[0].type == STGTY.STGTY_STORAGE)
{
//create Root Here
var root = storageElementInfos[0];
Root = new StructuredStorageContainer();
Root.element = root;
(Root as StructuredStorageContainer).Load(archive);
}
}
}
}
public void Save()
{
if (Root is StructuredStorageContainer)
{
(Root as StructuredStorageContainer).Save();
}
archive.Commit(0);
}
: 여기에 해당하는 코드 요소입니다.
internal System.Runtime.InteropServices.ComTypes.STATSTG element;
public string Name
{
get
{
return element.pwcsName;
}
set
{
element.pwcsName = value;
}
}