C++ 文件知识
#include "iostream"
#include "filesystem"
#include "fstream"
#ifdef WIN32 //Windows
#include <direct.h>
#include <io.h>
#else // Linux
#include <sys/io.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#endif
int count = 0;
std::string Message = ""; //读取文件内容,C风格
int ReadFile(char* FileName, char** Buf, char* ResponseData)
{
FILE* fp = fopen(FileName, "rb");
if (!fp)
{
sprintf(ResponseData,"{\"data\":{},\"code\":\"1\".\"msg\":\"Missing\"}\r\n");
printf("%s",ResponseData);
return -1;
}
fseek(fp, 0, SEEK_END);//将指针移动到文件尾
int FileLen = ftell(fp);//获取文件长度
fseek(fp, 0, SEEK_SET);//将指针移动到文件头 char* jsonstr = new char[FileLen];
if (!jsonstr)
{
sprintf(ResponseData, "{\"data\":{},\"code\":\"1\",\"msg\":\"Memory Error\"}\r\n");
printf("%s", ResponseData);
fclose(fp);
return -2;
}
memset(jsonstr, 0, FileLen);
int rLen = fread(jsonstr, 1, FileLen, fp);
if (rLen != FileLen)//rLen为读取到的长度,FileLen为文件长度
{
sprintf(ResponseData, "{\"data\":{},\"code\":\"1\",\"msg\":\"Load Json Error\"}\r\n");
printf("%s", ResponseData);
fclose(fp);
delete[] jsonstr;
return -3;
}
*Buf = jsonstr;
fclose(fp);
return 0;
} //读取文件内容,C++风格
void ReadFile(std::string FileName, std::string& out_Data, size_t& out_Size)
{
std::ifstream in_array_file;
in_array_file.open(FileName.c_str(), std::ios::in || std::ios::binary);
if (in_array_file.is_open())
{
unsigned char* buffer_bmp = nullptr;
unsigned int size_tmp = 0; /***********获取文件大小***********/
in_array_file.seekg(0, std::ios::end);
size_tmp = in_array_file.tellg();
in_array_file.seekg(0, std::ios::beg); /***********读取文件***********/
buffer_bmp = new unsigned char[size_tmp+1];
if (buffer_bmp != nullptr)
{
memset(buffer_bmp, 0, size_tmp + 1);
in_array_file.read((char*)buffer_bmp, size_tmp);
}
in_array_file.close(); /***********拷贝文件内容***********/
out_Data = (char*)buffer_bmp;
out_Size = out_Data.length(); if (buffer_bmp != nullptr)
{
delete[] buffer_bmp;
}
}
} //在指定位置修改文件内容
void ReviseFile(std::string FileName, std::string Data,int Place)
{
//ofstream在打开文件时默认清空文件所有内容。如果使用ios::app来打开文件,虽然不会清空文件内容,但是每次写操作都追加到文件末尾,即使使用seekp也没用。
//fstream fs("D:/test.txt", ios::binary | ios::out | ios::app);//使用ios::app来打开文件
//fs.seekp(2, ios::beg);//跳转到开头的第二个字节位置进行写入。
//fs.write("!!!", 3);//写入三个!!!,最后发现还是写在结尾,即使seekp也没用
//fs.close(); //将文件打开模式ios::app替换为ios::in,这样可以保证文件内容不会被清空,且文件指针偏移操作有效。
//fstream fs("D:/test.txt", ios::binary | ios::out | ios::in);//使用ios::in来打开文件
//fs.seekp(2, ios::beg);//跳转到开头的第二个字节位置进行写入
//fs.write("!!!", 3);//写入三个!!!,正常写入
//fs.close(); //中间的位置必须使用feekp然后再写才能成功修改。并且seekp之后,如果继续读一些内容,再写也写不进去。必须seekp之后就写,才写的进去。
std::fstream fs(FileName, std::ios::binary | std::ios::out | std::ios::in);
fs.seekp(Place, std::ios::beg);
fs.write(Data.c_str(), Data.length());
fs.close();
} //修改文件大小
void ReviseFile(std::string FileName, int Size)
{
//需要c++17标准库
//在100字节处进行截断,即只有100字节大小,多余100则多余部分舍弃,小于100则补0
//filesystem::resize_file("F:\\test.txt", 100);
std::filesystem::resize_file(FileName, Size);
} //判断文件是否存在
bool IsFileExists(std::string FileName)
{ //C++17标准
if (std::filesystem::exists(FileName))
{
if (std::filesystem::is_directory(FileName))
{
printf("%s is a directory\n", FileName.c_str());
}
else if (std::filesystem::is_regular_file(FileName)) {
printf("%s is a file\n", FileName.c_str());
}
else
{
printf("%s exist\n", FileName.c_str());
}
return true;
}
else
{
printf("%s no exist\n", FileName.c_str());
return false;
}
}
bool CheckAndCreateFile(std::string FileName)
{
FileName = FileName.substr(0, FileName.find_last_of('/'));
std::cout << "filename:" << FileName.c_str() << std::endl;
//判断该文件夹是否存在
if (access(FileName.c_str(), 0) == -1)
{
#ifdef WIN32
int flag = mkdir(FileName.c_str()); //Windows创建文件夹
#else
int flag = mkdir(FileName.c_str(), S_IRWXU); //Linux创建文件夹
#endif
}
}
void main()
{
/***********从文件中读取数据***********/
std::ifstream fin("D:/test.txt");
fin >> count;
fin.close();
std::cout << count << std::endl; count++;
/***********写入数据到文件中***********/
std::ofstream fout("D:/test.txt");
fout << count << "," << ++count <<"\n +";
fout.close(); /***********删除文件***********/
remove("D:/test.txt"); std::ifstream _fin("D:/data.txt");
int a ,b; char c;
/***********读取数据***********/
_fin >> a >> c >> b;
std::cout << "a=" << a << std::endl;
std::cout << "b=" << b << std::endl;
std::cout << "c=" << c << std::endl;//c为,
_fin.close(); a++; b++;
std::cout << "change a=" << a << std::endl;
std::cout << "change b=" << b << std::endl; //std::ofstream _fout("d:/data.txt");//清空文件重新写入
std::ofstream _fout("d:/data.txt",std::ios::out|std::ios::app);;//在文件末尾追加内容
_fout << a << "," << b << "\n";
_fout << "test" << "," << "\n";
_fout << "test" << "," << "\n";
_fout << "test" << "," << "\n";
_fout.close(); /***********判断文件是否存在***********/
IsFileExists("D:/data.txt"); /***********读取文件内容与大小***********/
std::string data = "";
size_t length = 0;
ReadFile("D:/data.txt",data,length);
std::cout << "file_data:" << data.c_str() << std::endl;
std::cout << "file_length:" << length << std::endl;
CheckAndCreateFile("E:/TEST/test.txt");
}
C++ 文件知识的更多相关文章
- 【黑客免杀攻防】读书笔记6 - PE文件知识在免杀中的应用
0x1 PE文件与免杀思路 基于PE文件结构知识的免杀技术主要用于对抗启发式扫描. 通过修改PE文件中的一些关键点来达到欺骗反病毒软件的目的. 修改区段名 1.1 移动PE文件头位置免杀 工具:PeC ...
- 每个开发人员必须知道PDB文件知识
大多数开发人员都意识到PDB文件有助于您进行调试,但仅此而已.如果你不知道PDB文件是怎么回事,不要觉得很糟糕,因为虽然有文档在那里,但它分散在周围,而且大部分是为编译器和调试器编写器准备的.虽然编写 ...
- Android Studio .grade文件知识
1.位置 2.问题:当AndroidStudio版本不同的时候,导致.gradle文件版本不同(当前为2.10),因为AndroidStudio升级的时候会自动升级.gradle.这样通过svn加载到 ...
- python 多文件知识
对于一个大型的项目,会存在很多个py文件,本文记录与多文件有关的内容. 1. python 如何在一个.py文件中调用另一个.py文件的类 如果是在同一个 module中(也就是同一个py 文件里), ...
- Java file文件的写入和读取及下载
File文件的写入 一.FileWriter 和BufferedWriter 结合写入文件 FileWriter是字符流写入字符到文件.默认情况下,它会使用新的内容代替文件原有的所有内容,但是,当指定 ...
- oracle 密码文件文件
密码文件作用: 密码文件用于dba用户的登录认证. dba用户:具备sysdba和sysoper权限的用户,即oracle的sys和system用户. 本地登录: 1)操作系统认证: [oracle@ ...
- 【转】Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题
转载地址:http://blog.csdn.net/ouyang_peng/article/details/51168072 Android 设备的CPU类型(通常称为”ABIs”) x86: 平板. ...
- 我的Android进阶之旅------>Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题
Android 设备的CPU类型通常称为ABIs 问题描写叙述 解决方法 1解决之前的截图 2解决后的截图 3解决方法 4建议 为什么你须要重点关注so文件 App中可能出错的地方 其它地方也可能出错 ...
- Js读取XML文件为List结构
习惯了C#的List集合,对于Javascript没有list 极为不舒服,在一个利用Js读取XML文件的Demo中,决定自己构建List对象,将数据存入List. 第一步,Js读取XML文件知识 X ...
- 【转载】Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题
转自:[欧阳鹏]http://blog.csdn.net/ouyang_peng Android 设备的CPU类型(通常称为”ABIs”) armeabiv-v7a: 第7代及以上的 ARM 处理器. ...
随机推荐
- Hystrix-Dashboard可视化
Hystrix-Dashboard可视化 1.新建子项目引pom.xml <dependencies> <!--hystrix dashboard--> <depende ...
- DDD(一)微服务、领域驱动设计、领域模型
DDD(一)微服务.领域驱动设计.领域模型 如果觉得样式不好:跳转即可 http://www.lifengying.site/(md文件复制过来有些样式会不一样) 什么是微服务 单体结构项目 优点:结 ...
- 进程间通信-信号-pipe-fifo
一.实验截图 (一)fifo (二)pipe (三)signal 二.实验代码 fifo //consumer #include <stdio.h> #include <stdlib ...
- mysql剪贴板
// mysql 8.0 连接数据源的配置文件 <!--数据源--><bean id="dataSource" class="com.alibaba.d ...
- 随机生成不重复的几个数(Unity)
using System.Collections.Generic; using UnityEngine; /// <summary> /// 随机数管理类 /// </summary ...
- 【APT】Bitter APT组织针对巴基斯坦航空综合部门攻击活动分析
前言 蔓灵花(Bitter)是一个被广泛认为来自印度的APT组织,该组织长期针对我国及巴基斯坦的政府.军工.电力.核等部门发动网络攻击,窃取敏感数据,具有较强的政治背景.本次分享一个蔓灵花组织针对巴基 ...
- 树莓派启动后自动连接wifi
安装好系统后我们先使用 网线进行连接 使用ssh 工具连接 cd /etc/wpa_supplicant/ wpa_passphrase "网络名称" "密码" ...
- CvT: Introducing Convolutions to Vision Transformers-首次将Transformer应用于分类任务
CvT: Introducing Convolutions to Vision Transformers Paper:https://arxiv.org/pdf/2103.15808.pdf Code ...
- Mysql的MVCC与幻读
以下特殊情况在可重复读时会产生幻读: 1.a事务先select,b事务insert确实会加一个gap锁,但是如果b事务commit,这个gap锁就会释放(释放后a事务可以随意操作), 2.a事务再se ...
- 12.21linux学习第二十天
今天老刘讲最后一章,第20章使用LNMP架构部署动态网站环境.定制安装17个安装包,编译安装要花很长时间,需要漫长的等待. LNMP动态网站部署架构是一套由Linux + Nginx + MySQL ...