C# 如何在内存中创建文本文件并在其上写入内容,然后在客户端中打开记事本并在其中打开该文件?

C# 如何在内存中创建文本文件并在其上写入内容,然后在客户端中打开记事本并在其中打开该文件?,c#,asp.net,memory,.net,notepad,C#,Asp.net,Memory,.net,Notepad,如何在内存中创建一个文本文件(Ram->无处保存)并在其上写入内容,然后打开客户端浏览器顶部的记事本,在其中打开该文本文件,让用户自己保存?->暗藏 提前谢谢你 致以最诚挚的问候你不能那样做。 您所能做的就是将文件的内容写入标题中正确类型的响应(例如“text/plain”),客户端浏览器将使用配置的查看器打开文本数据,查看所提供的MIME类型 <%@ Page language="vb" runat="server" explicit="true" strict="true" %>

如何在内存中创建一个文本文件(Ram->无处保存)并在其上写入内容,然后打开客户端浏览器顶部的记事本,在其中打开该文本文件,让用户自己保存?->暗藏

提前谢谢你

致以最诚挚的问候

你不能那样做。
您所能做的就是将文件的内容写入标题中正确类型的响应(例如“text/plain”),客户端浏览器将使用配置的查看器打开文本数据,查看所提供的MIME类型

<%@ Page language="vb" runat="server" explicit="true" strict="true" %>
2   <script language="vb" runat="server">
3   Sub Page_Load(Sender As Object, E As EventArgs)
4       Dim strRequest As String = Request.QueryString("file") '-- if something was passed to the file querystring
5       If strRequest <> "" Then 'get absolute path of the file
6           Dim path As String = Server.MapPath(strRequest) 'get file object as FileInfo
7           Dim file As System.IO.FileInfo = New System.IO.FileInfo(path) '-- if the file exists on the server
8           If file.Exists Then 'set appropriate headers
9               Response.Clear()
10              Response.AddHeader("Content-Disposition", "attachment; filename=" & file.Name) ' comment this line if needed
11              Response.AddHeader("Content-Length", file.Length.ToString())
12              Response.ContentType = "application/octet-stream" 'this is MIME type
13              Response.WriteFile(file.FullName)
14              Response.End 'if file does not exist
15          Else
16              Response.Write("This file does not exist.")
17          End If 'nothing in the URL as HTTP GET
18      Else
19          Response.Write("Please provide a file to download.")
20      End If
21  End Sub
22  </script>

2.
3子页面加载(发送者作为对象,E作为事件参数)
4 Dim strequest As String=Request.QueryString(“文件”)——如果向文件QueryString传递了内容
5如果strRequest为“”,则获取文件的绝对路径
6 Dim path As String=Server.MapPath(strRequest)'get file object As FileInfo
7 Dim文件名为System.IO.FileInfo=新System.IO.FileInfo(路径)'--如果服务器上存在该文件
8如果文件.存在,则“设置适当的标题”
9.明确的答复()
10 Response.AddHeader(“内容处置”、“附件;filename=“&file.Name”)在需要时注释此行
11 Response.AddHeader(“Content Length”,file.Length.ToString())
12 Response.ContentType=“application/octet stream”'这是MIME类型
13 Response.WriteFile(file.FullName)
14响应。如果文件不存在,则结束
15其他
16响应。写入(“此文件不存在。”)
17如果“URL中没有作为HTTP GET的内容”,则结束
18其他
19回答。写下(“请提供一个文件供下载。”)
20如果结束
21端接头
22

这里是稍微修改过的c#示例代码

<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true"%>
<script language="cs" runat="server">
    public void Page_Load(object sender, EventArgs e)
    {

        byte[] buffer;
        using (var memoryStream = new System.IO.MemoryStream())
        {
            buffer = Encoding.Default.GetBytes("Hello StackOverflow"); //Dummy data
            memoryStream.Write(buffer, 0, buffer.Length);
            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=hello.txt"); //This wil force browser to silently download file. you can comment this line to see difference
            Response.AddHeader("Content-Length", memoryStream.Length.ToString());
            Response.ContentType = "text/plain"; //This is MIME type
            memoryStream.WriteTo(Response.OutputStream);
        }
        Response.End();

    }
</script>

公共无效页面加载(对象发送方,事件参数e)
{
字节[]缓冲区;
使用(var memoryStream=new System.IO.memoryStream())
{
buffer=Encoding.Default.GetBytes(“Hello StackOverflow”);//伪数据
memoryStream.Write(缓冲区,0,缓冲区长度);
Response.Clear();
Response.AddHeader(“Content Disposition”,“attachment;filename=hello.txt”);//这将强制浏览器以静默方式下载文件。您可以对这一行添加注释以查看差异
AddHeader(“内容长度”,memoryStream.Length.ToString());
Response.ContentType=“text/plain”;//这是MIME类型
memoryStream.WriteTo(Response.OutputStream);
}
Response.End();
}
你不能那样做。
您所能做的就是将文件的内容写入标题中正确类型的响应(例如“text/plain”),客户端浏览器将使用配置的查看器打开文本数据,查看所提供的MIME类型

<%@ Page language="vb" runat="server" explicit="true" strict="true" %>
2   <script language="vb" runat="server">
3   Sub Page_Load(Sender As Object, E As EventArgs)
4       Dim strRequest As String = Request.QueryString("file") '-- if something was passed to the file querystring
5       If strRequest <> "" Then 'get absolute path of the file
6           Dim path As String = Server.MapPath(strRequest) 'get file object as FileInfo
7           Dim file As System.IO.FileInfo = New System.IO.FileInfo(path) '-- if the file exists on the server
8           If file.Exists Then 'set appropriate headers
9               Response.Clear()
10              Response.AddHeader("Content-Disposition", "attachment; filename=" & file.Name) ' comment this line if needed
11              Response.AddHeader("Content-Length", file.Length.ToString())
12              Response.ContentType = "application/octet-stream" 'this is MIME type
13              Response.WriteFile(file.FullName)
14              Response.End 'if file does not exist
15          Else
16              Response.Write("This file does not exist.")
17          End If 'nothing in the URL as HTTP GET
18      Else
19          Response.Write("Please provide a file to download.")
20      End If
21  End Sub
22  </script>

2.
3子页面加载(发送者作为对象,E作为事件参数)
4 Dim strequest As String=Request.QueryString(“文件”)——如果向文件QueryString传递了内容
5如果strRequest为“”,则获取文件的绝对路径
6 Dim path As String=Server.MapPath(strRequest)'get file object As FileInfo
7 Dim文件名为System.IO.FileInfo=新System.IO.FileInfo(路径)'--如果服务器上存在该文件
8如果文件.存在,则“设置适当的标题”
9.明确的答复()
10 Response.AddHeader(“内容处置”、“附件;filename=“&file.Name”)在需要时注释此行
11 Response.AddHeader(“Content Length”,file.Length.ToString())
12 Response.ContentType=“application/octet stream”'这是MIME类型
13 Response.WriteFile(file.FullName)
14响应。如果文件不存在,则结束
15其他
16响应。写入(“此文件不存在。”)
17如果“URL中没有作为HTTP GET的内容”,则结束
18其他
19回答。写下(“请提供一个文件供下载。”)
20如果结束
21端接头
22

这里是稍微修改过的c#示例代码

<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true"%>
<script language="cs" runat="server">
    public void Page_Load(object sender, EventArgs e)
    {

        byte[] buffer;
        using (var memoryStream = new System.IO.MemoryStream())
        {
            buffer = Encoding.Default.GetBytes("Hello StackOverflow"); //Dummy data
            memoryStream.Write(buffer, 0, buffer.Length);
            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=hello.txt"); //This wil force browser to silently download file. you can comment this line to see difference
            Response.AddHeader("Content-Length", memoryStream.Length.ToString());
            Response.ContentType = "text/plain"; //This is MIME type
            memoryStream.WriteTo(Response.OutputStream);
        }
        Response.End();

    }
</script>

公共无效页面加载(对象发送方,事件参数e)
{
字节[]缓冲区;
使用(var memoryStream=new System.IO.memoryStream())
{
buffer=Encoding.Default.GetBytes(“Hello StackOverflow”);//伪数据
memoryStream.Write(缓冲区,0,缓冲区长度);
Response.Clear();
Response.AddHeader(“Content Disposition”,“attachment;filename=hello.txt”);//这将强制浏览器以静默方式下载文件。您可以对这一行添加注释以查看差异
AddHeader(“内容长度”,memoryStream.Length.ToString());
Response.ContentType=“text/plain”;//这是MIME类型
memoryStream.WriteTo(Response.OutputStream);
}
Response.End();
}

我找到了以下代码:MemoryStream ms=new MemoryStream();StreamWriter sw=新StreamWriter(毫秒);sw.WriteLine(“这是一个测试文本”);System.Diagnostics.Process.Start(“notepad.exe”、“FileNmae”);但是System.Diagnostics.Process.Start需要一个文件名。。。我怎么做这项工作?thnaksHow我可以在注释中添加新行吗?@LostLord您的代码将在服务器上运行nodepad,而不是在客户端:)哇-这工作得很好/但您能解释更多吗?(我真的很抱歉-感谢您的关注和转换)我找到了以下代码:MemoryStream ms=new MemoryStream();StreamWriter sw=新StreamWriter(毫秒);sw.WriteLine(“这是一个测试文本”);System.Diagnostics.Process.Start(“notepad.exe”、“FileNmae”);但是System.Diagnostics.Process.Start需要一个文件名。。。我怎么做这项工作?thnaksHow我可以在注释中添加新行吗?@LostLord您的代码将在服务器上运行nodepad,而不是在客户端:)哇-这工作得很好/但您能解释更多吗?)我真的很抱歉-谢谢你的关注和帮助