INI文件读取失败之原因1-换行与回车

INI文件解析、遍历 工作中时常需要给软件添加配置文件功能,INI文件简单又高效,但是微软的那套API使用太不方便,尤其是INI文件的遍历,所有花了一下午时间造了个轮子,自己解析INI文件。目前只能读取Unicode小端编码,就是用windows记事本另存为时编码选择Unicode。 INI文件中元素分为节名、键和值,比如 [section] key=value键值必须属于某个节,节名必须放在中括号内,键和值中用等 阅读详情

引子:

    最近在读取他人提供的.ini文件的时候,使用先前运行良好的函数怎么也读不到。文件句柄可以得到,就是获取不了想要得到的section value and key value.

文件形如:

[SECTION 1]

Key1=value1

Key2=value2

Key3=value3

查找原因:

1 初步比较

     用ultraEdit-32打开,没有发现什么区别。用记事本打开发现先前的文件是

[SECTION 1]

Key1=value1

Key2=value2

Key3=value3

而现在的文件是

[SECTION 1]Key1=value1Key2=value2Key3=value3

这是为什么呢?

2 继续分析

     使用ultraEdit-32再次打开先前的文件,选择“编辑/十六进制功能/十六进制编辑”,发现每行的结尾是OD OA。

     使用同样的方式打开当前的文件,发现每行的结尾是OA。

3 深入挖掘

       OD OA的十进制数分别是13 10,查看ASCII代码对照表,发现13和10分别是CR(carriage return)和LF(line feed),即回车和换行。

4 拨云见日

    两个文件的差别:先前的文件使用回车和换行做结尾,现在的文件使用换行做结尾。查看读取文件的函数代码,原来是以回车(13)作为判断一行的结束的,当前的文件中没有回车,函数就不能在适当的位置停下来。难怪我在读取的时候只能获得文件句柄,却无法获得自己想要的值。

5 解决方法

方法一:改写读写函数,以换行符(10)为判断每行结束的标识;

方法二:将当前的文件在每行的末尾加回车,保存即可。

C++文件操作全解析:从fstream基础到高效读取实战 文件操作是编程中处理数据持久化的基础技术,其核心在于建立程序与外部存储之间的数据通道。在C++中,这一功能主要通过文件流(fstream)类族实现,其原理是利用流对象作为数据搬运的管道,通过指定不同的文件模式(如ios::in、ios::out、ios::binary)来控制读写行为与数据格式。掌握文件操作的技术价值在于构建健壮、可靠的应用程序,避免因权限、路径或模式错误导致的数据丢失或程序异常。典型的应用场景包括配置文件读取、日志记录、数据序列化及二进制资源加载。本文将深入探讨C++文件流中ifstrea 阅读详情

相关推荐

跨平台开发必知:CRLF与LF换行符差异详解与实战解决方案

在计算机系统中,文本文件的行结束符是一个基础但关键的概念,它定义了如何标记一行的结束。其原理源于早期电传打字机的两个独立机械操作——回车(Carriage Return, CR)和换行(Line Feed, LF)。不同的操作系统对此做出了不同的技术选择:Unix/Linux/macOS采用单一的LF(\n),而Windows则沿用了CRLF(\r\n)的组合。这一字节层面的差异,在跨平台协作中具有重要的技术价值,它直接影响到代码的可移植性、版本控制的清晰度以及脚本执行的正确性。在应用场景上,无论是通过Gi

364

怎样用INI读写有换行的字符串

有两个方法,各有优缺点: 1. 使用 WritePrivateProfileStruct和GetPrivateProfileStruct 把字符串当作结构处理。 优点:方便,高效 缺点:GetPrivateProfileStruct 需要知道字符串的长度做参数。 2. 将字符串base64编码 优点:读取的时候不需要知道字符串长度。 缺点:Win32API好像没有bas

chenguangxing3的专栏 4028

Python 3纯文本文件处理:编码、内存与原子性实战指南

纯文本文件处理是Python工程实践的基石,其核心在于理解字符编码原理与操作系统I/O机制。Python 3中open()函数并非简单封装,而是触发系统调用并构建TextIOWrapper→BufferedIOBase→文件描述符的三层抽象,直接决定文本解码准确性与跨平台兼容性。显式指定encoding参数可规避GBK/UTF-8乱码陷阱,而read()、readline()、readlines()则代表不同内存模型——前者适用于小文件快速处理,后者支撑百万行日志的流式分析。结合BOM自动识别、编码智能探测

weixin_33739541的博客 378

ini文件全部写入时换行符号未写入的问题处理

在做网络通信的配置软件时,遇到了一个问题,取回了文件的内容,存在字符数组中,但是保存时,原来文件中的换行都不见了,文件内容被写在一起。 所处理的对象是ini文件,使用的是MFC的CFile类,如下: CFile file; file.Open(_T("zw123.ini"),CFile::modeCreate| CFile::modeWrite); file.Write(recData ,

chalin1009的专栏 3505

AutoHotkey实战:打造一键快捷回复工具,提升社交与办公效率

自动化脚本是提升计算机操作效率的核心技术之一,其原理在于通过预设指令模拟用户操作,实现任务的批量或触发式执行。在技术价值上,它能将重复、繁琐或需要快速响应的操作自动化,显著节省时间并减少人为错误。这一技术广泛应用于办公自动化、数据采集、软件测试及日常效率工具开发等场景。本文聚焦于利用AutoHotkey这一强大的Windows自动化工具,实现一个高度定制化的快捷文本输入工具。该工具通过全局热键触发,能快速发送预设的回复文本,有效应对需要快速反应的在线沟通场景,其实现涉及热键绑定、剪贴板操作和GUI界面设计等

weixin_30883311的博客 402

批量文本替换避坑指南:编码、换行符与正则的工程实践

批量文本替换是运维和数据处理中高频使用的操作,但看似简单的查找替换背后,隐藏着编码、换行符、文件范围三个关键维度。GBK与UTF-8的字节差异、CRLF与LF的换行处理,都可能让一次替换演变成数据事故。理解按行读取与按块写入的原理,掌握正则表达式的匹配边界,才能实现精准高效的批量替换。从配置文件批量改域名、端口,到日志文件的规则化处理,工程实践中需要形成备份、预扫描、执行、校验的完整闭环。本文以实际工具为例,解析批量替换的常见翻车现场与排查思路,帮助工程师规避文件编码与换行符带来的隐患,建立可复用的替换规则

weixin_34239169的博客 520

ini文件无法读取问题

ini文件格式必须为ANSI格式才能够被库函数正常读取。

u013220323的专栏 2403

大疆M3508电机使用CAN通信进行速度PID闭环控制详解

目录一. 简介二. 电机通信协议三. 电机PID控制原理四. 官方代码移植-中断接收五. 官方代码移植-查询接收 一. 简介 之前写过一篇文章STM32实现四驱小车(五)电机控制任务——电机速度PID控制算法,其中是以大疆的M3508电机为例进行讲解的(没错,就是RoboMaster机器人同款电机,不过Robomaster上的电机好像是小一号的M2006)。不少小伙伴私信问我要代码,我都回复说不是有官方demo么。后来问的人多了我大概明白了,看来官方的Demo还是有点门槛。可能是带FreeRTOS操作系统看

qq_30267617的博客 7万+

INI文件读取失败,让 Codex 走 TaoToken 对照回车/换行查

排查INI文件读取失败,用Codex走TaoToken定位到0D 0A与0A的差异。在~/.codex/config.toml中把model_provider的base_url设为https://taotoken.net/api,并打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建API Key。通过UltraEdit-32十六进制对比两个.ini文件,发现旧文件行尾为CRLF,新文件只有LF,而读取函数只把回车13当行结束符,导致读不

weixin_42578963的博客 6

UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 0-4: ordinal not in range(128)

python3报错处理:UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-4: ordinal not in range(128) 一、报错场景 // 报错代码 Traceback (most recent call last): File "test_autoo3_2.py", line 214, in <module> main() File "test_autoo3_2.py",

浪里小飞侠的博客 4201

通讯模块_三菱IQ-R PLC串口通讯模块RJ71C24进行Modbus-RTU通讯

在日常的选型中,很多电气工程师咨询我,三菱iQ-R系列有没有Modbus通讯模块,我在这里可以肯定的回复您,这个肯定是有的;我们共有三种可以选择分别是RJ71C24、RJ71C24-R2、RJ71C24-R4。RJ71C24系列支持MC协议通信、通信协议通信、无顺序协议通信、双向协议通信全、MODBUS通信。当我帮助他们选型之后,他们在使用的时候,又是一头雾水。那么今天我抽一些时间讲解一RJ71...

weixin_39878549的博客 9274

LabVIEW实时目标部署自定义DLL与INI文件全攻略

在工业自动化与数据采集系统中,实时目标(如cRIO、PXI)运行在裁剪版操作系统上,其动态链接库(DLL)与配置文件(INI)的部署机制与Windows环境截然不同。开发者在主机端编译的DLL常因依赖Windows API或架构不匹配而无法加载,INI文件也可能因编码或路径问题导致解析失败。理解跨平台编译原理、掌握目标系统架构与工具链选择,是确保程序稳定运行的关键。通过合理的项目配置、路径管理和编码规范,可以高效地将自定义算法库与参数文件部署到实时控制器中,广泛应用于需要高实时性的测控场景。本文系统梳理了从

weixin_33976072的博客 360

图文并茂把Ubuntu22.04安装到u盘,实现即插即用

1、刚好打算把Ubuntu安装到u盘,随便记录下整个过程。 2、前提准备:u盘(我的是16g大小),Vmware虚拟机,Ubuntu镜像文件(可以去官网下载); 3、下面记录全过程: 1、打开虚拟机,并选择创建新的虚拟机: 2、选典型: ​ ...

子非鱼 1万+

在EVC里读写配置(ini)文件

DWORD GetPrivateProfileString(LPCTSTR lpAppName,           LPCTSTR lpKeyName,           LPCTSTR lpDefault,           LPTSTR lpReturnedString,           DWORD nSize,           LPCTSTR lpFileName ){  CF...

jianhai1229的博客 159

到底什么是电源的斜波补偿,电源芯片CS引脚作用,一文讲清楚!

上文有提到电流环,其实电流环再细分也有很多模式,用的最多的是峰值电流模式峰值电流模式调节工作原理如下:(1)当输出负载增大时,输出电压降低,因此,Vc 增大,线性增加的电感电流只有升高到更大的值才能使 PWM 电流比较器翻转,开关管导通的时间增长,占空比增加,输入功率增加,因此输出电压增加,当输出电压增加到调节的范围内时,系统保持平衡。

jwgdhuwdhg的博客 1万+

24. SAP UI5 应用如何使用 OData 数据模型

本教程之前的二十三个步骤,使用的数据模型都是 JSON 模型。从本步骤开始,我们要学习另一种非常重要的数据模型:OData 数据模型。 OData 数据模型也是 SAP 产品里广泛使用的数据模型,比如 SAP S/4HANA,SAP CRM Fiori 应用等等,都使用的是 OData 数据模型而不是 JSON 数据模型。 使用 OData 数据模型的典型场景就是,通过 OData 模型提供的 Read API,将远端服务器上存储的数据通过 OData 协议读取到客户端,并显示在 SAP UI5 应用里。.

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5799

C++ INI配置文件读写源码解析:从零实现跨平台配置管理

配置文件是软件工程中管理应用参数和设置的核心机制,其本质是将程序的可变数据与代码逻辑分离,实现灵活配置。INI格式作为一种经典的配置文件格式,因其结构简单、可读性强,在游戏开发、服务器配置和桌面应用等场景中广泛应用。其技术价值在于提供了一种轻量级、易于人工编辑和机器解析的数据持久化方案。通过理解键值对(Key-Value Pair)和节(Section)的组织原理,开发者可以构建健壮的配置管理系统。本文聚焦于C++标准库实现,深入剖析了如何利用文件流(fstream)和字符串处理,打造一个不依赖第三方库、代

weixin_33704591的博客 409

PCIe 全解析笔记:从协议本质到工程实现

学习 PCIe,最容易陷入的误区是直接跳进协议手册(Base Spec 1300 多页),然后在 TLP 字段、LTSSM 状态、Ordering Rules 中迷失方向。正确的思维路径历史维度:从 PCI 到 PCIe,解决了什么核心矛盾?抽象维度:协议栈分层的真正意图是什么?工程维度:高速串行链路面临哪些物理挑战?协议如何应对?系统维度:作为 CPU 与外设的"动脉",PCIe 如何融入整个计算机体系?带着这四个视角去看每一个细节,知识才能内化为认知。

m0_46644103的博客 262

OBS Studio libobs config_t 配置系统:带默认值机制的 INI 文件 API 全解

本文基于 libobs 官方 API 参考文档 [Config Files 文档](https://link.gitcode.com/i/7ee44b0f38c50817ab9deedf316a6c17) 及其底层实现 [libobs/util/config-file.h](https://link.gitcode.com/i/b23dd376cad047c5866983ca07e52897)、[

gitblog_00296的博客 480

把 SM30 用顺:从表设计到权限与传输,全面掌握 SAP Table Maintenance Generator

摘要 SAP的Table Maintenance Generator(TMG)是为配置表维护需求设计的经典工具,能够生成标准化的维护对话框(SM30)。它支持单表、维护视图(多表关联)和视图簇(导航式维护)三种维护对象类型。使用TMG前需注意三个关键设置:1)表维护权限选项;2)交付类(决定数据传输行为);3)客户端字段配置。通过SE54/SE11生成维护对话框时,需选择维护类型(一步/两步)和记录例程(控制传输)。TMG生成的对象包含函数组、屏幕和处理模块,但部分标准框架不可修改。实际应用中,可通过参数事

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 176

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【C 语言】文件操作 ( 配置文件读写 | 完整代码示例 ) ★

一、头文件 cfg.h、 二、核心业务 cfg.c、 三、主函数、 四、执行结果、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 5720

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C++ getline函数深度解析:从基础用法到混合输入与文件解析实战

在C++编程中,输入输出流处理是基础且核心的技术环节,它直接关系到程序的健壮性与用户体验。其原理基于流对象和缓冲区机制,通过运算符重载和成员函数提供数据读写能力。掌握流处理技术对于构建可靠的数据输入模块至关重要,尤其在需要处理用户交互、文件读取或网络数据解析的应用场景中。本文聚焦于getline函数,深入探讨其如何解决cin>>在读取含空格文本时的局限性,并解析其与流状态、缓冲区协同工作的机制。通过分析混合输入场景下的常见问题,如缓冲区残留字符导致的读取异常,并提供清空缓冲区的标准解决方案,帮助开发者编写更

weixin_33708432的博客 416

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Dev-C++配置文件路径详解:从备份迁移到深度定制

在软件开发中,集成开发环境(IDE)的配置管理是提升开发效率的关键环节。配置文件作为IDE的核心组成部分,记录了编辑器行为、编译器参数、主题配色等个性化设置,其本质是环境状态的持久化存储。理解配置文件的存储原理与结构,能够帮助开发者实现环境的快速备份、迁移与团队共享,从而构建稳定、可复现的开发工作流。对于C/C++初学者和轻量级项目开发而言,掌握配置文件路径与编辑技巧,意味着获得了环境的深度控制权,能够有效解决环境不一致、设置丢失等常见问题。本文以经典的Dev-C++及其分支小熊猫Dev-C++为例,深入解

weixin_33912453的博客 349
上一篇: StrToInt && StrToHex && IntToString && 编辑框格式
下一篇: 求职面试中的十二种"高级"错误(转)
mannhello
博客等级 码龄18年 64粉丝 52原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值