Tag: stream

如何将数据从托管程序集流式传输到本机库并再次返回?

如何将数据(文本)从托管程序集流式传输到本机库并将数据(文本)流式传输回托管程序集? 具体来说,我想在.NET端公开某种类型的System.IO.Stream ,并且( 最重要的是 )在本机端公开一个FILE * 。 本机方法的签名应该是: FILE * foo(FILE * bar); 本机p / invoke调用的包装签名应该是: CustomStream foo(CustomStream bar); 我不想在本机端使用回调方法 (一个用于获取更多数据,一个用于设置更多数据)。 我想在本机端使用FILE * – 以及对其进行操作的所有相关方法,例如fprintf 。 我不想要任何磁盘I / O. 这需要是内存中的操作。 我完全控制托管程序集和本机库。 该解决方案必须与.NET 2.0一起使用 我愿意创建任何类型的托管或非托管填充层来实现这一目标。 “显而易见”的解决方案是使用STDIN和STDOUT并启动子进程 – 但是我不想要一个单独的进程。 此外,我尝试重定向本机库的STDIN和STDOUT流,而这些流不是Windows上的控制台应用程序,但它的失败程度有些惊人(并且有很多头脑冲击)。 基于这个问题: 在C#Windows服务上重定向stdout + stderr我试图修改方法(至少)解决问题的一半“响应”流 – 但是没有FileStream (因为我想要一些类似于MemoryStream东西) )。 但是, FileStream是唯一公开合适的低级流句柄的流类型。 否则,我已经陷入困境,而且我现在正在考虑我需要深入研究并提出我自己的手动本地托管流实现,但实际上并不知道从哪里开始。 解 最后! 我在这里发布了一个完整的示例项目: http://pastebin.com/jcjHdnwz 这适用于.NET 3.5并使用AnonymousPipeServerStream […]

通过StringBuilder使用XmlWriter进行XML序列化是utf-16而via Stream是utf-8?

当我遇到它时,我感到很惊讶,并编写了一个控制台应用程序来检查它,并确保我没有做任何其他事情。 有谁能解释一下? 这是代码: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Xml; using System.Xml.Serialization; namespace ConsoleApplication1 { public class Program { static void Main(string[] args) { var o = new SomeObject { Field1 = “string value”, Field2 = 8 }; Console.WriteLine(“ObjectToXmlViaStringBuilder”); Console.Write(ObjectToXmlViaStringBuilder(o)); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(“ObjectToXmlViaStream”); Console.Write(StreamToString(ObjectToXmlViaStream(o))); Console.ReadKey(); } public static string ObjectToXmlViaStringBuilder(SomeObject […]

关于在ASP.NET响应流上编写的一些问题

我正在使用ASP.NET HttpHandler进行测试,以便直接在响应流上下载文件,而且我不太确定我的方式。 这是一个示例方法,将来文件可以存储在数据库中的BLOB中: public void GetFile(HttpResponse response) { String fileName = “example.iso”; response.ClearHeaders(); response.ClearContent(); response.ContentType = “application/octet-stream”; response.AppendHeader(“Content-Disposition”, “attachment; filename=” + fileName); using (FileStream fs = new FileStream(Path.Combine(HttpContext.Current.Server.MapPath(“~/App_Data”), fileName), FileMode.Open)) { Byte[] buffer = new Byte[4096]; Int32 readed = 0; while ((readed = fs.Read(buffer, 0, buffer.Length)) > 0) { response.OutputStream.Write(buffer, 0, readed); response.Flush(); } } […]

一个流中的多个流不会正确传递给客户端

在WCF服务中,我根据这个问题填写Stream,如: result.Stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(result.Stream); foreach (string fileN in zipFiles) { byte[] fileBytes = File.ReadAllBytes(fileN); writer.Write(BitConverter.GetBytes(fileBytes.Length), 0, 4); writer.Write(fileBytes, 0, fileBytes.Length); } writer.Flush(); return result; 在此之前我通过这个返回流,一切都在服务和客户端: result.Stream = new MemoryStream(File.ReadAllBytes(fileN)); Stream是MessageBodyMember但现在更改它以将所有文件保存在一个流中。 和客户端的测试方法: ExportClient export = new ExportClient(“exportEndPoint”); ExportResult_C result = export.Export(source); result.Stream.Position = 0; //result.Stream.SaveToFile(“d:\\kkk.log”); BinaryReader reader = new BinaryReader(result.Stream, […]

程序问题从Unity转到HoloLens – 无法从’string’转换为’System.IO.Stream’

我有一个使用C#在Unity中编写的程序,它初始化一个新的StreamReader并继续从我存储在Unity资源文件夹中的文本文件中读取文本数据。 当我在Unity中单击播放时,一切正常,并且文本被完美地读取和显示。 但是,当我尝试构建它以便通过HoloLens模拟器(平台:Windows Store,SDK:Universal 10,构建和运行:本地机器)运行它时,我收到错误:错误CS1503:参数1:无法转换从’string’到’System.IO.Stream’。 我不明白为什么这个错误甚至首先出现,因为StreamReader的构造函数有一个接受字符串参数的重载。 我的代码如下: string metadata = String.Format(“/Resources/…/metadata.txt”, list); if (File.Exists(Application.dataPath + metadata)) { using (StreamReader sr = new StreamReader(Application.dataPath + metadata)) { // …. } }

停止Stream.BeginRead()

我需要从我的虚拟COM端口读取数据并检测消息“Dreq”。 按下连接按钮后,它连接到我的COM8端口并开始读取新线程。 我还有一个断开按钮,我希望关闭读取并断开与COM8端口的连接。 但是,我在关闭BeginRead时遇到问题。 public partial class Form1 : Form { SerialPort sp; Stream stream; IAsyncResult recv_result; private void button1_Click(object sender, EventArgs e) { sp = new SerialPort(“COM8”, 9600); sp.Open(); sp.ReadTimeout = 50000; sp.NewLine = “\n\r\0”; stream = sp.BaseStream; recv_result = stream.BeginRead(new byte[1], 0, 0, new AsyncCallback(ReadCallBack), stream); } private void ReadCallBack(IAsyncResult ar) { Stream […]

使用自定义流(IEnumerable )

我正在使用Stream的自定义实现,它将IEnumerable流式传输到流中。 我正在使用此EnumerableStream实现来执行转换。 我正在使用它在流模式下通过WCF执行流式传输。 我能够将IEnumerable转换为流而没有问题。 有一次,我在客户端,我可以反序列化并获取所有数据,但是我无法找到停止在我的流上循环的条件。 我越来越: System.Runtime.Serialization.SerializationException:解析完成之前遇到的Stream of Stream。 这是我想要实现的示例: class Program { public static void Main() { var ListToSend = new List<List>(); var ListToReceive = new List<List>(); ListToSend = SimulateData().ToList(); using (Stream stream = GetStream(ListToSend)) { var formatter = new BinaryFormatter(); while (stream.CanRead || 1 == 1 || true…) // What should I put […]

关闭流,总是必要的? 。净

是否总是需要关闭流,或者因为.net是托管代码,一旦它退出范围就会自动关闭(假设没有exception引发)。 图说: static string SerialiseObjectToBase64(object obj) { var mstream = new MemoryStream(); … return Convert.ToBase64String(mstream.ToArray()); } 以上代码是否可以接受?

在一个Stream类中拼接多个流

我想创建一个类(让我们调用类HugeStream)在其构造函数中采用IEnumerable <Stream > 。 这个HugeStream应该实现Stream抽象类。 基本上,我有来自数据库的1到多个UTF8流,当它们放在一起时,会生成一个巨大的XML文档。 HugeStream需要由文件支持,以便我可以随时寻找整个拼接流的位置0。 有谁知道如何快速实现这个? 我在这个页面上看到了类似的东西,但它似乎不适合处理大量的大流。 效率是关键。 另外,我在浏览Streams时遇到了麻烦,因为我需要实现自己的Stream,所以我有点困惑。 如果有一个关于实现Stream类的好教程,任何人都知道,请告诉我; 我没有找到任何浏览的好文章。 我刚看到很多关于使用已经存在的FileStreams和MemoryStreams的文章。 我是一个非常直观的学习者,由于某种原因,找不到任何有用的东西来研究这个概念。 谢谢, 马特

从Windows Phone 7中读取文件

我的项目中有一个名为data/的文件夹,其中包含txt files 。 我将Build Action配置为所有文件的resources 。 我试过这些不同的方式: 方法1 var resource = Application.GetResourceStream(new Uri(fName, UriKind.Relative)); StreamReader streamReader = new StreamReader(resource.Stream); Debug.WriteLine(streamReader.ReadToEnd()); 方法2 IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication(); string[] fileNames = myIsolatedStorage.GetFileNames(“*.txt”); 方法3 using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) { using (StreamReader fileReader = new StreamReader(new IsolatedStorageFileStream(fName, FileMode.Open, isf))) { while (!fileReader.EndOfStream) { string line = fileReader.ReadLine(); al.Add(line); Debug.WriteLine(line); […]