Tag:

使用c#将FileStream编码为base64

我知道如何编码/解码一个简单的字符串到/从base64 。 但是,如果数据已经写入FileStream对象,我该怎么做呢? 假设我只能访问FileStream对象,而不能访问之前存储的原始数据。 在将FileStream刷新到文件之前,如何将FileStream编码为base64 。 在我将FileStream写入文件之后,我可以打开我的文件并对其进行编码/解码,但我想一步一步完成所有这一切,而不是一个接一个地执行两个文件操作。 该文件可能更大,并且在刚刚保存一小段时间后再加载,编码并再次保存它也需要两倍的时间。 也许有人认识一个更好的解决方案? 我可以将FileStream转换为字符串,对字符串进行编码,然后将字符串转换回FileStream,例如,我将做什么以及这样的代码将如何?

如何在xml字符串中发送二进制数据

我想以下面的xml格式将二进制文件发送到.net c#组件 在被调用的组件中,我将使用上面的xml字符串,并将BinaryFileString标记中接收的二进制字符串转换为filetype =”属性指定的文件。 文件类型可以是doc / pdf / xls / rtf 我在调用应用程序中有代码从要发送的文件中取出字节。 如何准备它与包裹在其周围的xml标签一起发送? 我希望应用程序向组件发送一个字符串而不是字节流。 这是因为我无法通过查看字节流来解密文件类型[pdf / doc / xls]。 因此具有filetype属性的xml字符串。 有什么想法吗? 提取下面的字节的方法 FileStream fs = new FileStream(_filePath, FileMode.Open, FileAccess.Read); using (Stream input = fs) { byte[] buffer = new byte[8192]; int bytesRead; while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0) {} } return buffer; 谢谢。 […]

如何将图像流嵌入MailMessage

我在将一个图像从Properties.Resources嵌入到MailMessage时遇到了一些困难,目前图像没有显示在我收到的电子邮件中。 我已经成功地从目录位置嵌入了图像,但是如果图像来自内存/应用程序则更喜欢。 这是我正在做的简化版本。 Bitmap b = new Bitmap(Properties.Resources.companyLogo); MemoryStream logo = new MemoryStream(); b.Save(logo, ImageFormat.Jpeg); MailMessage newEmail = new MailMessage(from, to); newEmail.Subject = subject; newEmail.IsBodyHtml = true; LinkedResource footerImg = new LinkedResource(logo, “image/jpeg”); footerImg.ContentId = “companyLogo”; AlternateView foot= AlternateView.CreateAlternateViewFromString(body + ” “, null, “text/html”); foot.LinkedResources.Add(footerImg); newEmail.AlternateViews.Add(foot); SmtpClient server = new SmtpClient(host, port); server.Send(newEmail);

将块中的文件发送到HttpHandler

我正在尝试将块中的文件发送到HttpHandler但是当我在HttpContext中收到请求时,inputStream为空。 所以a:发送时我不确定我的HttpWebRequest是否有效而b:接收时我不知道如何在HttpContext中检索流 任何帮助非常感谢! 这是我如何从客户端代码发出请求: private void Post(byte[] bytes) { HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(“http://localhost:2977/Upload”); req.Method = “POST”; req.ContentType = “application/x-www-form-urlencoded”; req.SendChunked = true; req.Timeout = 400000; req.ContentLength = bytes.Length; req.KeepAlive = true; using (Stream s = req.GetRequestStream()) { s.Write(bytes, 0, bytes.Length); s.Close(); } HttpWebResponse res = (HttpWebResponse)req.GetResponse(); } 这就是我在HttpHandler中处理请求的方式: public void ProcessRequest(HttpContext context) { Stream chunk […]

FileStream.BeginWrite优于FileStream.Write?

我需要对同一个文件进行一批写操作,但是在文件中的不同位置。 我希望以最佳性能实现此目的,因此查看了同步FileStream.Write和异步FileStream.BeginWrite方法。 同步实现很简单,只需在循环中调用FileStream.Write所需的次数即可。 异步版本在循环中调用FileStream.BeginWrite,然后执行WaitHandle.WaitAll以阻止它们全部完成。 令我惊讶的是,这比简单的同步版本慢。 我使用正确的构造函数创建了FileStream,因此我可以请求异步操作,并且还测试了指示False的IAsyncResult.CompletedSynchronous属性,因此它们确实以异步方式运行。 似乎使用Be​​ginWrite的唯一好处是你在写入时不会阻塞你的线程。 除了这个好处之外,使用异步版本还有什么意义吗? 这是我用于播放异步方法的测试代码,可能有一个明显的错误? // Size of a chunk to be written to file var chunk = 1024 * 64; // Number of chunks to write async var reps = 32; // Create new file and set length var fs = new FileStream(@”C:\testfile.dat”, FileMode.Create, FileAccess.ReadWrite, FileShare.None, chunk, true); fs.SetLength(chunk * […]

C#:用于文本文件的尾部程序

我有一个日志文件,不断记录短线。 我需要开发一个服务来响应(或轮询或监听)添加到该文件的新行,这是一种unix’尾程序,因此我的服务始终是最新的文件。 我不认为打开读取流并保持打开是一个好主意。 也许我应该使用FileSystemWatcher类。 长话短说,我需要实时解析添加到此文件的每一个新行。 任何想法的帮助或指示真的很感激。 编辑 我一直不太清楚。 我不需要任何程序,我正在编写程序。 用于读取(然后处理)添加到文件的每个新行。 我的意思是我正在寻找的是一种方法论(或者:如何实现这个?),以便不断地跟踪一直保持写入的文件。 我必须开发一个“侦听”此文件并在每个新行上执行操作的Windows服务。 因此,如果在给定时刻文件是: 12.31.07 – jdoe [log on] 347 12.32.08 – ssmith [log on] 479 12.32.08 – mpeterson [log off] 532 12.32.09 – apacino [log on] 123 在线的那一刻 12.32.11 – pchorr [log on] 127 由日志记录程序(我无法访问)添加到日志文件中,我需要我的Windows服务“对行成瘾”做出反应,拦截新行( 12.32.11 – pchorr [log on] 127 )和处理它。 等等。 现在,我不知道该怎么做。 我应该每隔n秒轮询一次文件,将最后一条读取行存储在内存中并仅处理新添加的行。 […]

难以将图像保存到MemoryStream

我在将一个字节流从图像(在本例中为jpg)保存到System.IO.MemoryStream对象时遇到了一些困难。 目标是将System.Drawing.Image保存到MemoryStream ,然后使用MemoryStream将图像写入字节数组(我最终需要将其插入到数据库中)。 但是,在MemoryStream关闭后检查变量data表明所有字节都是零…我很难过,不知道我在哪里做错了… using (Image image = Image.FromFile(filename)) { byte[] data; using (MemoryStream m = new MemoryStream()) { image.Save(m, image.RawFormat); data = new byte[m.Length]; m.Write(data, 0, data.Length); } // Inspecting data here shows the array to be filled with zeros… } 任何见解将不胜感激!

使用控制器动作filter捕获HTML输出

我在捕获HTML输出的动作上有以下filter,将其转换为字符串,执行一些操作以修改字符串,并返回带有新字符串的ContentResult。 不幸的是,我一直以一个空字符串结束。 private class UpdateFilter : ActionFilterAttribute { private Stream stream; public override void OnActionExecuting(ActionExecutingContext filterContext) { stream = filterContext.HttpContext.Response.Filter; stream = new MemoryStream(); filterContext.HttpContext.Response.Filter = stream; } public override void OnResultExecuted(ResultExecutedContext filterContext) { StreamReader responsereader = new StreamReader(filterContext.HttpContext.Response.Filter); //empty stream? why? responsereader.BaseStream.Position = 0; string response = responsereader.ReadToEnd(); ContentResult contres = new ContentResult(); contres.Content […]

在C#/ .NET中为producer / cosumer实现异步流

有一个lib将其结果输出到给定的Stream对象中。 我想在lib完成之前开始使用结果。 如果生产者提前跑得太远,Stream应该是阻塞的,以简化使用并避免过多的内存消耗; 线程安全,允许生产者和消费者的独立存在。 一旦lib完成,生产者线程应关闭流,从而通知消费者没有更多数据。 我正在考虑使用NetworkStream或PipeStream(匿名),但两者都可能因为通过内核发送数据而变慢。 任何推荐? var stream = new AsyncBlockingBufferedStream(); void ProduceData() { // In producer thread externalLib.GenerateData(stream); stream.Close(); } void ConsumeData() { // In consumer thread int read; while ((read = stream.Read(…)) != 0) { … } } var stream = new AsyncBlockingBufferedStream(); void ProduceData() { // In producer thread externalLib.GenerateData(stream); stream.Close(); […]

一个Stream中的多个文件,自定义流

根据这里的答案,我想将多个文件流写入一个流,如下所示: 为每个流的长度编号保留4个字节,每个流内容写入后,它的结束流的长度数(4个字节后)将是这样的 Stream = File1 len + File1 stream content + File2 len + File2 stream content + …. 示例代码: result = new ExportResult_C() { PackedStudy = packed.ToArray() , Stream = new MemoryStream() }; string[] zipFiles = Directory.GetFiles(zipRoot); foreach (string fileN in zipFiles) { MemoryStream outFile = new MemoryStream(File.ReadAllBytes(fileN)); MemoryStream len = new MemoryStream(4); //initiate […]