C# asp.net文件帮助程序直接将文件写入客户端

C# asp.net文件帮助程序直接将文件写入客户端,c#,asp.net,filehelpers,C#,Asp.net,Filehelpers,我正在使用FileHelpers库进行一个C#.net项目。除了我需要通过点击按钮保存生成的CSV外,一切正常 因此,用户单击一个按钮,就会得到保存文件的提示。我知道Filehelpers有一个WriteStream选项,但他们自己的文档只显示了WriteFile的一个示例。我不知道WriteStream是否是我们需要的,但我认为是的 有人知道是否可以将CSV文件直接保存到客户端而不是服务器硬盘 谢谢 更新更多详细信息: 我将尝试提供更多细节,以帮助澄清我试图实现的目标。我不想在服务器上保存任何

我正在使用FileHelpers库进行一个C#.net项目。除了我需要通过点击按钮保存生成的CSV外,一切正常

因此,用户单击一个按钮,就会得到保存文件的提示。我知道Filehelpers有一个WriteStream选项,但他们自己的文档只显示了WriteFile的一个示例。我不知道WriteStream是否是我们需要的,但我认为是的

有人知道是否可以将CSV文件直接保存到客户端而不是服务器硬盘

谢谢

更新更多详细信息:

我将尝试提供更多细节,以帮助澄清我试图实现的目标。我不想在服务器上保存任何文件。我正在使用FileHelpers生成一条记录,我想尝试使用他们的WriteStream方法将该记录作为CSV直接写入他们的浏览器;但奇怪的是,他们提供的例子根本没有使用这种方法

以下是他们方法的链接:

这里是有问题的方法

public void WriteStream(
   TextWriter writer,
   IEnumerable records,
   int maxRecords
);
我可以很容易地将文件保存到服务器上,但我不想这样做,因为我不需要它,我想让客户端直接将它保存到自己的机器上

可能我必须通过正常的途径来实现这一点,但我看到了WriteStream方法,并认为可能FileHelpers提供了一种很好的干净方法来实现相同的结果


希望这更清楚。

您应该能够执行以下操作:

Response.ContentType = @"application/x-msdownload";
Response.AppendHeader("content-disposition", "attachment; filename=" + FILE_NAME);

Response.Write(csv.ToString());
Response.Flush();
Response.End();
关于StackOverflow有很多更详细的建议,例如。这取决于你想要达到的目标

编辑

我认为你缺少的步骤是:

MemoryStream stream = new MemoryStream();
StreamWriter streamWriter = new StreamWriter(stream);
engine.WriteStream(streamWriter, records);
stream.Position = 0;
然后你可以使用

StreamReader reader = new StreamReader(stream);
Response.Write(reader.ReadToEnd);

不要在我上面的第一个示例中使用
Response.Write(csv.ToString())

不要忘记刷新StreamWriter。参见示例

public MemoryStream CreateCsvFileAsMemoryStream(List<TestItem> testItems) {
        var engine = new FileHelperEngine<TestItemCsvMapping>();
        var items = testItems.Select(ti => (TestItemCsvMapping)ti).ToList();

        engine.HeaderText = engine.GetFileHeader();
        var ms = new MemoryStream();
        var sw = new StreamWriter(ms);
        engine.WriteStream(sw, items);
        sw.Flush();

        //var reader = new StreamReader(ms);
        //ms.Position = 0;
        //Console.Write(reader.ReadToEnd());

        ms.Position = 0;

        return ms;
    }
公共内存流CreateCsvFileAsMemoryStream(列表测试项){
var engine=new FileHelperEngine();
var items=testItems.Select(ti=>(TestItemCsvMapping)ti.ToList();
engine.HeaderText=engine.GetFileHeader();
var ms=新内存流();
var sw=新的StreamWriter(毫秒);
引擎写入团队(软件、项目);
sw.Flush();
//var读取器=新的StreamReader(毫秒);
//ms.Position=0;
//Console.Write(reader.ReadToEnd());
ms.Position=0;
返回ms;
}

您可以发布当前保存文件的工作代码吗?这应该不是一个问题,但如果不查看当前代码,就很难确定要执行的操作。如果这是
ASP.net
应用程序,那么您希望使用
Response对象
以及
StreamWriter类
我真的没有任何代码了(在这个阶段已经编写并删除了一千次)。我试图做的是点击按钮,通过浏览器将CSV文件返回给用户。我可以将它保存到服务器上,这没有问题,但是我无法在不保存文件的情况下让Response.TransmitFile()的等效项工作。希望这更清楚。您仍然可以这样做。您需要使用
Response
来执行此操作。这里是一个链接,您可以参考它,这是非常直接的更改
Response.ContentType=“application/ms excel”
Response.ContentType=“应用程序/文本”
Response.ContentType=“text/csv”谢谢,我知道如何用你提到的方式给客户写信,但我认为FileHelpers库有一些我可以使用的等价物。也许没有,我需要使用你链接到的流程,但我可以发誓,他们确实提供了相同流程的一些版本。谢谢,我编辑了我的原始问题,以便更清楚地了解我试图实现的目标。