相关疑难解决方法(0)

为什么我的CSV文件末尾有一百万个空字符

我正在动态生成CSV数据导出.我这样做是通过获取项的哈希集,然后逐行转换它们并将它们写入MemoryStream,然后将其作为FileResult发送到客户端.问题是文件末尾有大约一百万个NULL字符,我猜这些字符的数量等于hashset中的项目数.但它们位于文件的末尾,而不是每行的结尾.

无论如何,代码是这样的:

Controller方法:

public ActionResult ExportList(ListExportModel model)
{
  System.IO.MemoryStream ms = ls.ExportListToCsv(model,Server.MapPath("~/uploads"));
  return File(ms.GetBuffer(),"text/csv",model.MailingList.ListName + ".csv");
}
Run Code Online (Sandbox Code Playgroud)

ExportListToCsv方法

public MemoryStream ExportListToCsv(ListExportModel model, string folderpath)
{
    MemoryStream stream = new MemoryStream();
    StreamWriter writer = new StreamWriter(stream);

    writer.WriteLine(string.Join(",", model.Columns));
    var data = GetListItemsFromCsv(model.ListId, folderpath);

    XmlDocument doc = new XmlDocument();
    // Parallel.ForEach(data, (li) =>
    foreach (var li in data)
    {
        string line = "";
        foreach (var field in model.Columns)
        {
            doc.LoadXml(li.CustomFields);
            switch (field)
            {
                //our standard fields
                    case "email":
                        line += li.Email + …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc

7
推荐指数
1
解决办法
1725
查看次数

POSIX O_DIRECT 与 Windows FILE_FLAG_WRITE_THROUGH & FILE_FLAG_NO_BUFFERING

从我可以收集,然后使用POSIXO_DIRECTopen()阻断设备文件的工作方式的方式既结合同FILE_FLAG_WRITE_THROUGH,并FILE_FLAG_NO_BUFFERINGCreateFile()在Windows上-这是正确的我假设?

打开:

O_DIRECT尽量减少进出该文件的 I/O 的缓存影响。通常这会降低性能,但它在特殊情况下很有用,例如当应用程序执行自己的缓存时。文件 I/O 直接进出用户空间缓冲区。

创建文件:

如果FILE_FLAG_WRITE_THROUGH使用,但FILE_FLAG_NO_BUFFERING 是不是也规定,使系统缓存中的效果,然后将数据写入到系统缓存,但被刷新到磁盘刻不容缓。如果FILE_FLAG_WRITE_THROUGHFILE_FLAG_NO_BUFFERING 都被指定,那么系统缓存没有生效,那么数据会立即刷新到磁盘而不经过 Windows 系统缓存。操作系统还请求将硬盘的本地硬件缓存写入持久性媒体。

winapi posix file device

5
推荐指数
1
解决办法
2397
查看次数

标签 统计

asp.net-mvc ×1

c# ×1

device ×1

file ×1

posix ×1

winapi ×1