我用过了可是文件并没有显示出来,也不知道是怎么回事。我把代码贴出来吧,大家帮忙给我指下问题。 下面的是IStreamImpl.cs using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices.ComTypes; using System.IO;namespace HUDStream { public class MetadataStream:IStream { MemoryStream MetaDataStream; public void LoadFromFile(string FileName) { if (MetaDataStream != null) { MetaDataStream.Dispose(); } MetaDataStream = new MemoryStream(); FileStream fs = File.Open(FileName, FileMode.Open); //new FileStream(FileName, FileMode.Open); fs.Seek(0, SeekOrigin.Begin); byte[] bytes; bytes = new byte[fs.Length]; fs.Read(bytes, 0, (int)fs.Length); fs.Dispose(); MetaDataStream.Write(bytes, 0, bytes.Length); } #region IStream 成员 public void Clone(out IStream ppstm) { throw new Exception("The method or operation is not implemented."); } public void Commit(int grfCommitFlags) { throw new Exception("The method or operation is not implemented."); } public void CopyTo(IStream pstm, long cb, IntPtr pcbRead, IntPtr pcbWritten) { throw new Exception("The method or operation is not implemented."); } public void LockRegion(long libOffset, long cb, int dwLockType) { throw new Exception("The method or operation is not implemented."); } public void Read(byte[] pv, int cb, IntPtr pcbRead) { if (MetaDataStream != null) { int byteReaded = MetaDataStream.Read(pv, (int)MetaDataStream.Position, cb); unsafe { if (pcbRead != IntPtr.Zero) { int* ps = (int*)pcbRead; *ps = byteReaded; } } } } public void Revert() { throw new Exception("The method or operation is not implemented."); } public void Seek(long dlibMove, int dwOrigin, IntPtr plibNewPosition) { long pos = MetaDataStream.Seek(dlibMove, (SeekOrigin)dwOrigin); unsafe { if (plibNewPosition != IntPtr.Zero) { int* ps = (int*)plibNewPosition; *ps = (int)pos; } } } public void SetSize(long libNewSize) { throw new Exception("The method or operation is not implemented."); } public void Stat(out STATSTG pstatstg, int grfStatFlag) { throw new Exception("The method or operation is not implemented."); } public void UnlockRegion(long libOffset, long cb, int dwLockType) { throw new Exception("The method or operation is not implemented."); } public void Write(byte[] pv, int cb, IntPtr pcbWritten) { throw new Exception("The method or operation is not implemented."); } #endregion } } 然后又写一个接口为webform调用。 下面是MetaDataLoader.cs代码: using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices.ComTypes; using System.IO;namespace HUDStream { public interface IMetaDataLoader { IStream LoadMetaData(string FileName); } public class MetaDataLoader : IMetaDataLoader { public IStream LoadMetaData(string FileName) { MetadataStream metaDataStream; metaDataStream = new MetadataStream(); metaDataStream.LoadFromFile(FileName); return metaDataStream; } } } 在这里获得一个stream。也就是我最终想要得到的。但结果调试metaDataStream有结果可是就是无法显示图片。这个图片用delphi的loadformfile()可以正确输出显示的。 那位高人知道症结所在请多多帮忙。 qq:115415639 多谢,静候佳音。
下面的是IStreamImpl.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices.ComTypes;
using System.IO;namespace HUDStream
{
public class MetadataStream:IStream
{
MemoryStream MetaDataStream;
public void LoadFromFile(string FileName)
{
if (MetaDataStream != null)
{
MetaDataStream.Dispose();
}
MetaDataStream = new MemoryStream();
FileStream fs = File.Open(FileName, FileMode.Open);
//new FileStream(FileName, FileMode.Open);
fs.Seek(0, SeekOrigin.Begin);
byte[] bytes;
bytes = new byte[fs.Length];
fs.Read(bytes, 0, (int)fs.Length);
fs.Dispose();
MetaDataStream.Write(bytes, 0, bytes.Length);
} #region IStream 成员 public void Clone(out IStream ppstm)
{
throw new Exception("The method or operation is not implemented.");
} public void Commit(int grfCommitFlags)
{
throw new Exception("The method or operation is not implemented.");
} public void CopyTo(IStream pstm, long cb, IntPtr pcbRead, IntPtr pcbWritten)
{
throw new Exception("The method or operation is not implemented.");
} public void LockRegion(long libOffset, long cb, int dwLockType)
{
throw new Exception("The method or operation is not implemented.");
} public void Read(byte[] pv, int cb, IntPtr pcbRead)
{
if (MetaDataStream != null)
{
int byteReaded = MetaDataStream.Read(pv, (int)MetaDataStream.Position, cb);
unsafe
{
if (pcbRead != IntPtr.Zero)
{
int* ps = (int*)pcbRead;
*ps = byteReaded;
}
}
}
} public void Revert()
{
throw new Exception("The method or operation is not implemented.");
} public void Seek(long dlibMove, int dwOrigin, IntPtr plibNewPosition)
{
long pos = MetaDataStream.Seek(dlibMove, (SeekOrigin)dwOrigin);
unsafe
{
if (plibNewPosition != IntPtr.Zero)
{
int* ps = (int*)plibNewPosition;
*ps = (int)pos;
}
}
} public void SetSize(long libNewSize)
{
throw new Exception("The method or operation is not implemented.");
} public void Stat(out STATSTG pstatstg, int grfStatFlag)
{
throw new Exception("The method or operation is not implemented.");
} public void UnlockRegion(long libOffset, long cb, int dwLockType)
{
throw new Exception("The method or operation is not implemented.");
} public void Write(byte[] pv, int cb, IntPtr pcbWritten)
{
throw new Exception("The method or operation is not implemented.");
} #endregion
}
}
然后又写一个接口为webform调用。
下面是MetaDataLoader.cs代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices.ComTypes;
using System.IO;namespace HUDStream
{
public interface IMetaDataLoader
{
IStream LoadMetaData(string FileName);
} public class MetaDataLoader : IMetaDataLoader
{
public IStream LoadMetaData(string FileName)
{
MetadataStream metaDataStream;
metaDataStream = new MetadataStream();
metaDataStream.LoadFromFile(FileName);
return metaDataStream;
}
}
}
在这里获得一个stream。也就是我最终想要得到的。但结果调试metaDataStream有结果可是就是无法显示图片。这个图片用delphi的loadformfile()可以正确输出显示的。
那位高人知道症结所在请多多帮忙。
qq:115415639
多谢,静候佳音。