MemoryStream我正在使用和将对象导出到 csv StreamWriter。但保存文件后,我发现文件末尾丢失了。它在一条线的中间被切断。
下面是我的代码:
public void Export(ProductExport productExport)
{
var country = (Country)(int.Parse(productExport.Firma.Code));
using(var stream = new MemoryStream())
{
var sw = new StreamWriter(stream);
// Write header row
sw.WriteLine(
"{0};{1};{2};{3};{4};{5};{6};{7};{8};{9}",
"Groep",
"TecDoc Leverancier",
"TecDoc Ref",
"SA",
"EAN",
"Omschrijving NL",
"V/E",
"VPE",
"Prijs per",
"Bruto prijs"
);
foreach(var product in productExport.Products)
{
// Write header row
sw.WriteLine(
"{0};{1};{2};{3};{4};{5};{6};{7};{8};{9}",
product.Artgrp,
product.TecDoc != null ? product.TecDoc.Supplier : "",
product.TecDoc != null ? product.TecDoc.Value : "",
product.Ids.Where<Id>(i => i.Type == "SA").Select(i => …Run Code Online (Sandbox Code Playgroud) 我正在使用此代码将 MP3 MemoryStream 写入文件:
using (var nSpeakStreamAsMp3 = new MemoryStream())
using (var nWavFileReader = new WaveFileReader(nSpeakStream))
using (var nMp3Writer = new LameMP3FileWriter(nSpeakStreamAsMp3, nWavFileReader.WaveFormat, LAMEPreset.STANDARD_FAST))
{
nWavFileReader.CopyTo(nMp3Writer);
string sPath = "C:\\inetpub\\wwwroot\\server\\bin\\mymp3.mp3";
using (FileStream nFile = new FileStream(sPath, FileMode.Create, System.IO.FileAccess.Write))
{
nSpeakStreamAsMp3.CopyTo(nFile);
}
sRet = (String.Concat("data:audio/mpeg;base64,", Convert.ToBase64String(nSpeakStreamAsMp3.ToArray())));
}
return sRet;
Run Code Online (Sandbox Code Playgroud)
由于某种我没有看到的原因,这会生成一个 0 字节的文件。但是,MP3 流是有效的并且可以工作。我将其作为 Base64String 传递到网站,并且我确实听到了它。
这里可能错误在哪里?
我有一个测试.Net Core应用程序,我想从管道中读取 http 响应以供我个人实践。
这个最小代码示例提供了 http 响应。我知道它正在破坏响应主体,我需要稍后修复它,但这不是我的问题。MemoryStream()我的问题是即使我没有使用任何数据源初始化它,它内部如何有http响应?
"Startup.cs":
public void Configure(IApplicationBuilder app)
{
app.Use(async (context, next) =>
{
using (var swapStream = new MemoryStream())
{
context.Response.Body = swapStream;
await next.Invoke();
swapStream.Seek(0, SeekOrigin.Begin);
string responseBody = new StreamReader(swapStream).ReadToEnd();
}
});
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,MemoryStream()根本没有使用任何数据源进行初始化。但最后responseBody我可以看到我的http响应。让我更困惑的是,如果我删除,context.Response.Body = swapStream;那么我在responseBody.
如果有人能帮助我理解这段代码是如何工作的,我将不胜感激。
试图写简单的客户端和服务器接收/发送数据TMemoryStream.当我在客户端按下按钮时btnTestClick出现错误
Access violation at address 005D5581 in module 'Client.exe'. Write of adress 00000000.我做错了什么?
Btw客户端服务器连接工作正常我瘦cuz IdTCPClient1Connected功能正在写'Client Connected!'.
客户代码
procedure TForm1.btnTestClick(Sender: TObject);
var
msRecInfo: TMemoryStream;
arrOf: array of Integer; i:integer;
begin
for i := 0 to 10 do
arrOf[i]:=random(100);
msRecInfo:= TMemoryStream.Create;
try
msRecInfo.Write(arrOf, SizeOf(arrOf));
idTCPClient1.IOHandler.Write(msRecInfo);
finally
msRecInfo.Free;
end;
end;
end
Run Code Online (Sandbox Code Playgroud)
服务器代码
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
msRecInfo: TMemoryStream;
arrOf: array of Integer; i:integer;
begin
msRecInfo:= TMemoryStream.Create;
try
AContext.Connection.IOHandler.ReadStream(msRecInfo, -1, False);
msRecInfo.Position := 0;
msRecInfo.Read(arrof, SizeOf(arrof)); …Run Code Online (Sandbox Code Playgroud)