node.js fs.writeFile 未完全覆盖文件

2024-04-12

我有一个长度为 X 的文件,它正在被长度为 X-Y 的字符串覆盖。问题是,该文件仍然保留 X-Y 过去的信息,因此它与第一个较长的文件一样长。所以这是我的测试输出,它让我适合:

文件开头为:

{
    "sOption1": "String",
    "nOption2": 23.5,
    "sOption3": "String",
    "bOption3B": true,
    "anOption4": [
        5,
        6,
        7
    ],
    "sNewString": "FruitSalad",
    "bNewBoolean": false,
    "iNewNumber": 14.2,
    "anNewArray": [
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10
    ],
    "oNewObject": {
        "bToBeOrNotToBe": true,
        "sFinishQuote": "That is the question"
    }
}

将写入的数据更改为以下内容:

{
    "sOption1": "String",
    "nOption2": 23.5,
    "sOption3": "String",
    "bOption3B": true,
    "anOption4": [
        5,
        6,
        7
    ],
    "sNewString": "YummyYummy",
    "bNewBoolean": true,
    "iNewNumber": 2.14,
    "anNewArray": [
        10,
        9
    ],
    "oNewObject": {
        "bToBeOrNotToBe": false,
        "sNewQuote": "To die, to sleep, no more"
    }
}

之后,文件现在是:

{
    "sOption1": "String",
    "nOption2": 23.5,
    "sOption3": "String",
    "bOption3B": true,
    "anOption4": [
        5,
        6,
        7
    ],
    "sNewString": "YummyYummy",
    "bNewBoolean": true,
    "iNewNumber": 2.14,
    "anNewArray": [
        10,
        9
    ],
    "oNewObject": {
        "bToBeOrNotToBe": false,
        "sNewQuote": "To die, to sleep, no more"
    }
}       "bToBeOrNotToBe": true,
        "sFinishQuote": "That is the question"
    }
}}

看到物体末端的垃圾了吗?它是上一个文件留下的,即使我用以下代码写出来:

DeviceConfiguration.prototype.SetPersistentUserOption = function(sNewOptionName, NewOption)
{
    var sNewFile = "";
    var fs = require('fs');

    //if one of the primitive types, it's simple, just add it to object
    if(typeof(NewOption) == "string" || typeof(NewOption) == "number" || typeof(NewOption) == "boolean")
    {
        this.oPersistentUserOptions[sNewOptionName] = NewOption;
    }
    else if(NewOption instanceof Array)
    {
        //blank out array if it was there already
        this.oPersistentUserOptions[sNewOptionName] = [];   

        //now go back and copy each element over one at a time
        for(var nIndex = 0; nIndex < NewOption.length; nIndex++)
        {   this.oPersistentUserOptions[sNewOptionName][nIndex] = NewOption[nIndex];    }
    }
    else if(NewOption instanceof Object)
    {
        //blank out object if it was there already
        this.oPersistentUserOptions[sNewOptionName] = {};   

        //now go back and copy each element over one at a time
        for(Member in NewOption)
        {   this.oPersistentUserOptions[sNewOptionName][Member] = NewOption[Member];    
        }
    }

    //stringify the object, and make it pretty with options null, 4
    sNewFile = JSON.stringify(this.oPersistentUserOptions, null, 4);

    //write to the file, parameter is immediately in object memory though
    fs.writeFile(PERSISTENT_USER_SELECTED_OPTIONS_FILENAME, sNewFile, function(err){console.log(err);});
    //fs.writeFileSync(PERSISTENT_USER_SELECTED_OPTIONS_FILENAME, sNewFile);

    console.log(sNewFile.length);
    console.log(sNewFile);
};

我已检查以确保 sNewFile 变量的长度正确,确实如此。我还在后续写入磁盘之间暂停了长达 6 秒的时间,所以我看不出这怎么可能是一个计时问题。

如果我使用 writeFileSync 问题就会消失,但我确实没有选择为此应用程序执行同步写入,因为我对时间要求很严格,并且不想放慢写入磁盘的速度。

我使用的是 node.js 0.8.21,但看起来该接口与最新版本之间的 fs 接口没有发生任何变化。

还有人打过类似的东西吗?这让我很不舒服。 。 。


我刚刚在 0.8.21 ( linux ) 上测试了这个,它按预期工作。

var fs = require('fs')

var str1 = "aaaaaaaaaa"
var str2 = "bbbbbb"
var str3 = "bbbbbbaaaa"

fs.writeFile('test',str1,function(){
  fs.writeFile('test',str2,function(){
    fs.readFile('test','utf8',function(err,buff){
      console.log(buff === str2)
      console.log(buff === str3)
    })
  })
})

output
> node test.js
true
false
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

node.js fs.writeFile 未完全覆盖文件 的相关文章

随机推荐

  • 如何在单击时突出显示表格行?

    根据我的项目要求 我必须突出显示 onClick 上的表行 有什么办法可以做到这一点吗 或者请建议我替代方案 如果您想像使用通用 ListView 一样使用单击突出显示的股票 则需要将每行的背景设置为android background a
  • 很难理解带有 async_read 和 async_write 的 Boost ASIO TCP 的一些概念

    我很难理解使用 async read 和 async write 时构建 tcp 客户端的正确方法 这examples http www boost org doc libs 1 38 0 doc html boost asio examp
  • 如何独立更改图例中的颜色线大小和形状大小?

    我有一个线图 将颜色和形状组合到同一个图例中 我希望图例中的点尺寸更大 图例中的线条保持不变 以便形状更清晰 From 如何增加ggplot2图例中点的大小 https stackoverflow com questions 2041596
  • scikit learn Pipeline 是否将 StandardScaler 应用于 y?

    鉴于我的管道是 pipe Pipeline scaler StandardScaler regressor LinearRegression 然后我打电话pipe fit X train y train 管道是否将缩放器应用于特征和目标 还
  • 这行代码是做什么的? const uint32_t 好人 = 0x1 << 0

    有人可以告诉我这里正在做什么吗 const uint32 t goodguys 0x1 lt lt 0 我假设它是 c 并且它正在为一个组分配一个标签 但我从未见过这样做 我是一个自学的 Objective C 人 这对我来说看起来很陌生
  • 测试使用 jQuery 和 window 对象的 React 组件

    我的 React 组件必须响应resize事件 我使用 jQuery 即 componentDidMount function window on resize function 然而 这会导致我的 Jest 测试出现问题 具体来说 Typ
  • WooCommerce 使用 ajax 在结账页面上向购物车总计添加自定义费用

    我试图在用户更改送货地址选择下拉列表时使用 ajax 动态向购物车总计添加费用 我可以获取该值 但当选择另一个状态时 它不会更新总计 我的ajax请求 jQuery document ready function jQuery shippi
  • 我需要知道如何创建交叉表查询

    我想动态生成状态列 有三张表 资产 资产类型 资产状态 Table assets assetid int assettag varchar 25 assettype int assetstatus int Table assettypes
  • 在 IntelliJ Idea IDE 中禁用单击、拖动、剪切和粘贴

    在我的 IntelliJ Idea 13 1 2 IDE 中 我不断遇到通过笔记本电脑触摸板单击并拖动进行选择的情况 我总是不小心点击并拖动文本和剪切线 我在选项和设置面板中搜索了 单击和拖动 一词 但我没有找到关闭此功能的方法 Intel
  • Python dbfpy 和 FoxPro

    我在这里使用一种古老的数据库格式 dbf 文件 不要问为什么 只知道某个软件决定扩展foxpro支持 因为微软决定扩展foxpro支持 现在 我在特定文件上收到以下错误 我已成功加载另一个文件 我很好奇该数据库是否有问题 我确信您可能需要查
  • xlsxwriter set_column 隐藏不起作用

    我试图用 XlsxWriter 隐藏一个列 但它似乎不起作用 函数返回0表示该列已成功隐藏 我使用的是带有数字的列 而不是带有字母的列 workbook get worksheet by name SENSORS set column 5
  • 更改 Visual Studio 2005 中的应用程序图标?

    我想为我的游戏的演示版本使用不同的图标 并且我正在使用与完整版本不同的构建配置来构建演示 使用预处理器定义来锁定某些内容 使用不同的图形 有没有办法让 Visual Studio 在演示配置中为应用程序图标使用不同的图标 但继续为完整版本的
  • 更改 a:hover 上 li 的背景图像

    我有一个菜单 div div
  • Heroku 上的 Django 部署问题与正在运行的应用程序的精确克隆:PUSH REJECTED ERROR

    我在 Heroku 上有一个 Django 应用程序 我在同一个 Heroku 帐户上设置了另一个应用程序 现在我想要第一个应用程序的另一个实例 我刚刚克隆了第一个应用程序并推送到新创建的应用程序中 但它不起作用 做的时候出现这个错误git
  • 编译时 -pthread 标志的含义

    在各种多线程 C 和 C 项目中 我看到了 pthread标志应用于编译和链接阶段 而其他人根本不使用它 只是通过 lpthread到链接阶段 不编译链接有没有危险 pthread标志 即什么 pthread实际上呢 我主要对 Linux
  • npm 安装后如何引用 Google Material-Design-Icons?

    所以做完之后npm install material design icons 我如何在我的React应用 所包括的方法here https google github io material design icons icon font
  • Laravel - 缓存 Eloquent 并频繁更新

    是否可以对经常修改的对象使用缓存 例如 假设我们有一个 BlogPost 对象 并且有一个经常更改的 num of views 列 以及其他列 是否可以更新缓存和数据库中的 num of views 字段 而不破坏缓存对象并重新创建它 我可
  • 如何通过 UIAutomation 处理“_APPNAME_想使用您当前的位置”警报

    好吧 这让我抓狂 我正在运行一个小型 CI 构建系统 我正在使用 UIAutomation 对我的应用程序进行 UI 测试 由于应用程序使用 CoreLocation 因此第一次启动应用程序时 我会收到一条小警报 要求我确认是否希望跟踪我的
  • Swig (Node.js) 中的 JSON.parse() ?

    当我陷入困境时 我试图从 Jade 切换到 Swig 被 Swig 的疯狂性能所吸引 作为我的 Express 模板引擎 我将一系列序列化 JSON 从 Express 发送到 Swig 并使用此循环检索 Swig 中的数据这里 ul if
  • node.js fs.writeFile 未完全覆盖文件

    我有一个长度为 X 的文件 它正在被长度为 X Y 的字符串覆盖 问题是 该文件仍然保留 X Y 过去的信息 因此它与第一个较长的文件一样长 所以这是我的测试输出 它让我适合 文件开头为 sOption1 String nOption2 2