qt开发的小软件,可以递归转换文件编码(qt为了防止内存泄露所做的保护机制)
应用场景
当你下载别人的源码的时候,而别人的源码跟你自己电脑里面的编码不一致的情况下将会出现乱码,但是如果要一个个转换编码的话那么那样所需要花的时间太多,所以就有必要写一个软件递归遍历项目下面所有的文件,从而实现自动转换编码,因为项目下面又有文件夹,所有需要使用递归实现。
实现原理如下
第一步:先用这个文件原先的编码读取文件内容存到局部变量当中,然后调用QFile::remove()方法删除文件
第二步:创建一个跟原先文件名同名的文件,然后设置你要转换的编码,(使用QTextSream::setCodec()方法),将文件内容写入这个新创建的文件当中
以上两步就可以实现给文件转码。
代码如下
void Widget::switchCode(QString filePath)
{
QFile file(filePath);
if( !file.open(QIODevice::ReadOnly | QIODevice::Truncate))
{
return;
}
QTextStream in(&file);
in.setCodec(oldCode.toUtf8().data());
QString content = in.readAll();
//qDebug() << "content:" << content;
file.resize(0);
file.remove();
file.close();
QFile outFile(filePath);
if( !outFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
{
return;
}
QTextStream out(&outFile);
out.setCodec(newCode.toUtf8().data());
out << content;
outFile.close();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
上面的代码很简单,就是我跟我上面说的一样
其中需要介绍的就是oldCode和newCode,这两个代表
要转换的文件的原先编码和要转换的编码,变量是定义在类里面的
属成员变量
下面介绍如果递归实现整个项目的转化
项目递归转换
void Widget::recursion(QString filePath)
{
QDir dir(filePath);
//文件列表
QFileInfoList file_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
for(int i = 0; i < file_list.size(); i++)
{
QString path = file_list.at(i).absoluteFilePath();
//转换编码
switchCode(path);
}
//文件夹列表
QFileInfoList folder_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
for(int i = 0; i < folder_list.size(); i++)
{
QString path = folder_list.at(i).absoluteFilePath();
//递归遍历文件
recursion(path);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
QFileInfo这个类表示文件信息,如果需要知道打开的文件是文件夹还是文件,就需要借助这个类,QFileInfoList这个类是QFileInfo类的集合,就是’QList < QFileInfo > ‘的typedef定义,剩余的比较简单,大体的思路是先获取文件夹下面的所有文件,然后使用循环给这个文件转码,然后获取文件夹下面的所有文件夹,然后顺还进行递归调用。
软件界面展示
qt开发的小软件,可以递归转换文件编码(qt为了防止内存泄露所做的保护机制)的更多相关文章
- InputStreamReader介绍&代码实现和转换文件编码_练习
InputStreamReader介绍&代码实现 package com.yang.Test.ReverseStream; import java.io.FileInputStream; im ...
- linux iconv 转换文件编码
查看文件编码file -i filename 递归转换(包括子文件夹)find default -type d -exec mkdir -p utf/{} \;find default -type f ...
- 使用windows命令和iconv.exe批量转换文件编码
iconv是知名的开源跨平台编码转换库,iconv.exe是iconv库在windows下的命令行工具,iconv.exe的一般用法:iconv.exe -f gbk -t utf-8 gbk.txt ...
- Linux平台上转换文件编码
Linux系统的iconv指令是一个很好的文件编码转换工具,支持的编码范围广,使用方便,例如将一个utf-8编码的文件(名为tic)转换为gbk编码: iconv -f utf-8 -t gbk ti ...
- Linux下批量转换文件编码
find -iname "*.java" -exec enca {} + |grep -v ASCI |grep -v -i utf |awk -F':' '{print $1}' ...
- mac 查看文件编码及转换文件编码
方法是用vim , vim 打开相应文件, :set fileencoding即可显示文件编码格式 将文件编码转换为utf-8 :set fileencoding=utf-8
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_6_练习_转换文件编码
- Java---设计模式app小软件汇总应用
写了一个app小软件,重点不在于软件,软件bug挺多,也没去修改. 这个小软件只是为了更好的说明和了解设计模块而做的. Java 程序设计–包结构 Java程序设计的系统体系结构很大一部分都体现在包结 ...
- QT开发环境搭建
一.Qt发展史 1991年,由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架: 2008年,Nokia从Trolltech公司收购Qt, 并增加LGPL的授权模式: 2011年,Digia从N ...
随机推荐
- TensorFlow 学习(七) — 常用函数 api、tf.nn 库
0. 四则运算 平方:tf.square(),开方:tf.sqrt() tf.add().tf.sub().tf.mul().tf.div().tf.mod().tf.abs().tf.neg() 1 ...
- ssh远程连接docker中的 linux container
ssh远程连接docker中的container 由于工作需要,要远程连接Container,本地机器是windows,以下为解决步骤: 1. 环境 本地:Windows ↓ Docker版本1. ...
- Ubuntu 16.04安装MinGW32(在/etc/apt/sources.list里添加源)
Ubuntu 16.04下直接使用命令安装MinGW32: sudo apt-get install mingw32 但是,会报错: Unable to locate package mingw3 ...
- 读取xml格式的字符串和上下文中的xml数据
1.读取xml格式的字符串 假设有一段下面的xml格式的字符串: <xml> <return_code><![CDATA[SUCCESS]]></re ...
- javascript学习-创建json对象数据,遍历
之前我已经有讲过后台返回json数据到前台,并在前台遍历json数据. 这里讲下直接在JS里创建JSON数据,然后遍历使用~ 创建代码例如以下:(创建的是JSON对象) var YearSelect ...
- CLR托管内存
在物理内存中观察CLR托管内存及GC行为 虽然看了一些书,还网络上的一些博文,不过对CLR托管内存细节依然比较模糊.而且因为工作原因总会有很多质疑,想要亲眼看到内存里二进制数据的变化. 所以借助w ...
- node 设置自动启用定时任务控件 node-schedule
[转]Quartz中时间表达式的设置-----corn表达式 时间格式: <!-- s m h d m w(?) y(?) -->, 分别对应: 秒>分>小时>日&g ...
- 配置文件——App.config文件读取和修改
作为普通的xml文件读取的话,首先就要知道怎么寻找文件的路径.我们知道一般配置文件就在跟可执行exe文件在同一目录下,且仅仅在名称后面添加了一个.config 因此,可以用Application.Ex ...
- HDU 4357 String change 法冠军
意甲冠军: 鉴于a串b串,问我们能否a变b串 办法:自选a的2快报,ascil+=1 然后交换位置,能够操作自如倍. 3个月3以上就能T^T 2法官将着眼于暴力 #include <cstdio ...
- HDU2665 Kth number 【合并树】
Kth number Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...