unix、dos、Mac文件格式转换 C#
最近有个需求,xml文件修改时dos格式要变成unix格式,查找了一下三个文件的区别在于换行符
unix格式:-LF(\n)
dos格式:-LF/CR(\r\n)
mac格式:-CR(\r)
C#后台代码
public class ConvertFileHelper{public enum FileType{DOS,UNIX,MAC}private const byte CR = 0x0D;//\rprivate const byte LF = 0x0A;//\nprivate static readonly byte[] DOS_LINE_ENDING = new byte[] { CR, LF };public static FileType DetermineFileFormat(string fileName){byte[] data = File.ReadAllBytes(fileName);int position = 0;if (Array.IndexOf(data, LF, position) >= 0){if (Array.IndexOf(data, CR, position) >= 0){return FileType.DOS;}return FileType.UNIX;}if (Array.IndexOf(data, CR, position) >= 0){return FileType.MAC;}return FileType.DOS;}public static void AutoFileTypeConvert(string fileName, FileType fileType){FileType oldFileType = DetermineFileFormat(fileName);if (fileType == FileType.DOS){if (oldFileType == FileType.DOS)return;else if (oldFileType == FileType.UNIX)Unix2Dos(fileName);else if (oldFileType == FileType.MAC)Mac2Dos(fileName);}else if (fileType == FileType.UNIX){if (oldFileType == FileType.UNIX)return;else if (oldFileType == FileType.DOS)Dos2Unix(fileName);else if (oldFileType == FileType.MAC)Mac2Unix(fileName);}else if (fileType == FileType.MAC){if (oldFileType == FileType.MAC)return;else if (oldFileType == FileType.DOS)Dos2Mac(fileName);else if (oldFileType == FileType.UNIX)Unix2Mac(fileName);}}public static void Unix2Dos(string fileName){byte[] data = File.ReadAllBytes(fileName);using (FileStream fileStream = File.OpenWrite(fileName)){BinaryWriter bw = new BinaryWriter(fileStream);int position = 0;int index = 0;do{index = Array.IndexOf(data, LF, position);if (index >= 0){if (index > 0 && data[index - 1] == CR){bw.Write(data, position, index - position + 1);}else{bw.Write(data, position, index - position);bw.Write(DOS_LINE_ENDING);}position = index + 1;}}while (index >= 0);bw.Write(data, position, data.Length - position);fileStream.SetLength(fileStream.Position);}}public static void Mac2Dos(string fileName){byte[] data = File.ReadAllBytes(fileName);int len = data.Length - 1;using (FileStream fileStream = File.OpenWrite(fileName)){BinaryWriter bw = new BinaryWriter(fileStream);int position = 0;int index = 0;do{index = Array.IndexOf(data, CR, position);if (index >= 0){if (index >= 0 && index < len && data[index + 1] == LF){bw.Write(data, position, index - position + 1);}else{bw.Write(data, position, index - position);bw.Write(DOS_LINE_ENDING);}position = index + 1;}} while (index >= 0);bw.Write(data, position, data.Length - position);fileStream.SetLength(fileStream.Position);}}public static void Dos2Unix(string fileName){byte[] data = File.ReadAllBytes(fileName);using (FileStream fileStream = File.OpenWrite(fileName)){BinaryWriter bw = new BinaryWriter(fileStream);int position = 0;int index = 0;do{index = Array.IndexOf(data, CR, position);if (index >= 0){if (index > 0 && data[index + 1] == LF){bw.Write(data, position, index - position);}else{bw.Write(data, position, index - position + 1);}position = index + 1;}}while (index >= 0);bw.Write(data, position, data.Length - position);fileStream.SetLength(fileStream.Position);}}public static void Dos2Mac(string fileName){byte[] data = File.ReadAllBytes(fileName);using (FileStream fileStream = File.OpenWrite(fileName)){BinaryWriter bw = new BinaryWriter(fileStream);int position = 0;int index = 0;do{index = Array.IndexOf(data, LF, position);if (index >= 0){if (index > 0 && data[index - 1] == CR){bw.Write(data, position, index - position);}else{bw.Write(data, position, index - position + 1);}position = index + 1;}}while (index >= 0);bw.Write(data, position, data.Length - position);fileStream.SetLength(fileStream.Position);}}public static void Mac2Unix(string fileName){byte[] data = File.ReadAllBytes(fileName);int len = data.Length - 1;using (FileStream fileStream = File.OpenWrite(fileName)){BinaryWriter bw = new BinaryWriter(fileStream);int position = 0;int index = 0;do{index = Array.IndexOf(data, CR, position);if (index >= 0){if (index >= 0 && index < len && data[index + 1] == LF){bw.Write(data, position, index - position + 1);}else{bw.Write(data, position, index - position);bw.Write(LF);}position = index + 1;}} while (index >= 0);bw.Write(data, position, data.Length - position);fileStream.SetLength(fileStream.Position);}}public static void Unix2Mac(string fileName){byte[] data = File.ReadAllBytes(fileName);using (FileStream fileStream = File.OpenWrite(fileName)){BinaryWriter bw = new BinaryWriter(fileStream);int position = 0;int index = 0;do{index = Array.IndexOf(data, LF, position);if (index >= 0){if (index > 0 && data[index - 1] == CR){bw.Write(data, position, index - position + 1);}else{bw.Write(data, position, index - position);bw.Write(CR);}position = index + 1;}}while (index >= 0);bw.Write(data, position, data.Length - position);fileStream.SetLength(fileStream.Position);}}}
unix、dos、Mac文件格式转换 C#相关推荐
- unix dos mac 文件格式不同导致问题
问题: 运行该脚本出现/bin/sh^M: bad interpreter: No such file or directory 解决: 错误中脚本文件的一个非常可能的原因是DOS格的, 即每一行的行 ...
- 如何在DOS/Windows和Linux/Unix之间进行文件格式转换?
如何在DOS/Windows和Linux/Unix之间进行文件格式转换?<?xml:namespace prefix = o ns = "urn:schemas-microsoft-c ...
- bmp转换tiff c++代码_Creative Convert for Mac(文件格式转换工具)
Creative Convert for Mac是应用在Mac上的一款文件格式转换工具,可将PDF,Ai,PSD和/或EPS文件转换为独立的图形文件格式,不需要PDF阅读器或图像编辑器,将每页保存为独 ...
- windows文件 linux cr,DOS/Windows和Linux/Unix间的文件格式转换
做无线传感器网络自己生产拓扑的时候一直碰到看起来相同的文件被解析成拓扑的时候却不同,一直摸不清原因,居然是这个问题,还好看见了这篇文章. DOS/Windows和Linux/Unix的文件换行回车格式 ...
- windows编辑linux系统文件格式,DOS/Windows和Linux/Unix间的文件格式转换
做无线传感器网络自己生产拓扑的时候一直碰到看起来相同的文件被解析成拓扑的时候却不同,一直摸不清原因,居然是这个问题,还好看见了这篇文章. DOS/Windows和Linux/Unix的文件换行回车格式 ...
- 怎么将文件转换成linux文件,Linux将DOS文件格式转换成UNIX文件格式的方法
dos格式文件传输到unix系统时,会在每行的结尾多一个^M,当然也 有可能看不到,但是在vi的时候,会在下面显示此文件的格式,比如 "dos.txt"[dos] 120L, 25 ...
- C++编译问题-检测到 Mac 文件格式: 请将源文件转换为 DOS 格式或 UNIX 格式
问题:检测到 Mac 文件格式: 请将源文件转换为 DOS 格式或 UNIX 格式 不知道原因,但是解决方案如下: 1.将源代码复制到word中,保存. 2.将保存后的代码复制到新建的txt文本中, ...
- Linux命令之dos2unix - 将DOS格式文本文件转换成UNIX格式
用途说明 dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter).DOS下的文本文件是以\r\n作为 ...
- 如何在 Unix 和 DOS 格式之间转换文本文件
本文介绍如何在 Unix 和 DOS 格式之间转换文本文件.DOS 文本文件带有回车符( \r )和换行符( \n )作为它们的换行符,而 Unix 文本文件只有( \n )换行符作为换行符. 有多种 ...
最新文章
- c语言实现图形界面实现四则运算,C语言实现四则运算的生成器
- sqlserver 行转列
- 输入字符串,统计英文字符、大写小写字母,数字字符,空格和其他字符
- mysql select符合查询_数据库select group by 和having语句 多表连接查询 复合查询
- Python取top N相关的模块:heapq模块
- C语言实现常用数据结构——队列
- 深入理解JVM类文件格式
- 一次从节点同步出错的解决
- Elasticsearch java api(五) Bulk批量索引
- PHP 基本语法,变量
- Spark RDD、DataFrame原理及操作详解
- chrome charset使用_使用JWT保护你的Spring Boot应用 Spring Security实战
- 移动机器人建图与导航代码实现——1.Hector SLAM
- Java SE《基础篇》——(二)程序基础01
- 【odoo】odoo使用阿里邮箱配置邮件系统
- 制作u盘winpe启动盘_RUFUS.小巧的U盘启动盘制作工具
- python在windows与linux下读取doc文件
- 盘古开源:2022年全球汽车产能仍受制于芯片短缺,中国减产量占一成
- HBuilder webApp开发(十)在线差异化升级
- 女神节礼品:大学男神创作“专属情诗app”
热门文章
- 2021-05-11 Matlab遗传算法工具箱的使用及实例(非线性规划)
- 清华大学之计算机科学与技术,冯建华(清华大学计算机科学与技术系教授)_百度百科...
- 重置所有坚果云设置--Linux版
- 修改WIN11右键菜单为经典右键菜单(这一招足够)
- Linux 3.3.5系统移植
- Android 绘图详解-思维导图版
- PMP第七节:项目成本管理
- ArcGis 在线地图相关资源
- java数据结构停车场管理系统_停车场管理系统数据结构毕业论文.doc
- linux怎样卸载电脑系统软件,Linux系统怎么卸载软件? Linux卸载Dropbox的教程