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 ...
随机推荐
- 神经网络的 Delta 学习规则(learning rule)
1. δ 学习规则 1986 年,由认知心理学家 McClelland 和 Rumellhart 在神经网络训练中引入了 Δ 学习规则,该规则亦可称为连续感知器学习规则(与离散感知器学习规则相并行). ...
- caffe 源码阅读
bvlc:Berkeley Vision and Learning Center. 1. 目录结构 models(四个文件夹均有四个文件构成,deploy.prototxt, readme.md, s ...
- Crystal Report - 利用后台代码设计或实现水晶报表工具栏相关功能
水晶报表工具栏分页按钮响应事件: 水晶报表中有自带的分页功能,在设置好每页显示的记录后会自动分页,并自动记录总页数和保存当前页,在工具栏可以通过“首页”“尾页”“下一页”“上一页”和“跳页”进行页面跳 ...
- TCP/IP协议族(一)
TCP/IP协议族(一) HTTP简介.请求方法与响应状态码 接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的. ...
- WPF中桌面屏保的制作(主要代码)
原文:WPF中桌面屏保的制作(主要代码) 制作要点:(1) 使用System.Windows.Threading.DispatcherTimer;(2) 将Window属性设置为: this ...
- MFC 窗口分割与通信
一.关于CSplitterWnd类我们在使用CuteFtp或者NetAnt等工具的时候,一般都会被其复杂的界面所吸引,在这些界面中窗口被分割为若干的区域,真正做到了窗口的任意分割. 那么我们自己如何创 ...
- Opencv中SVM样本训练、归类流程及实现
支持向量机(SVM)中最核心的是什么?个人理解就是前4个字--"支持向量",一旦在两类或多累样本集中定位到某些特定的点作为支持向量,就可以依据这些支持向量计算出来分类超平面,再依据 ...
- WinEdt && LaTex(三)—— 宏包
amsmath:最常用的数学宏包 1. bm:bold math 数学字体加粗 \documentclass{article} \usepackage{bm} \begin{document} \[ ...
- Windows中点击“关闭”button发生了什么?
对于Windows操作,当用户点击"关闭"button时,窗体函数就会收到一个WM_DESTROY消息. 窗体函数应该调用PostQuitMessage(0) 向消息队列插入一个W ...
- python 教程 第十九章、 图形界面编程
第十九章. 图形界面编程 import Tkinter top = Tkinter.Tk() hello = Tkinter.Label(top, text='Hello World!') hello ...