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 处理器. ...
随机推荐
- vue 祖孙传值
- prometheus 对接飞书告警
prometheus对接飞书告警 环境 名称 ip地址 cpu 内存 yz-feishu 10.65.6.91 4c 8G 飞书创建群组机器人,参考飞书官网 https://www.feishu.cn ...
- Java数组之三种初始化及内存分析
内存分析 Java内存 堆: 1.存放new的对象和数组 2.可以被所有的线程共享,不会存放别的对象引用 栈: 1.存放基本变量类型(会包含这个基本类型的具体数值) 2.引用对象的变量(会存放这个引用 ...
- 利用python中的win32com模块操作Word、Excel文件
word操作 doc文件转换为docx文件 安装win32com模块:pip3 install pypiwin32 import os from win32com.client import Disp ...
- 【SQL Server】列名首字母大写
使用UPPER 和 LOWWER函数组合首字母大写.例如: 1 SELECT user_id,(UPPER(LEFT(name,1) ) + RIGHT(name , LEN(name) -1) )A ...
- 根本不常用知识之Generator
首先babel链接很重要 https://www.babeljs.cn/repl#?browsers=&build=&builtIns=false&corejs=3.6& ...
- 3927Circular Sequence 思维题(求环形最大子列和)
Given a sequence with n elements, if the last element is also adjacent to the first element of the s ...
- memoのMac折腾记录
memoのMac折腾记录 纯粹是一些零散的学习记录.有错误欢迎指出. 我就是一鼠标党,不会Linux. zsh加载 惭愧,最近才知道bash和zsh是两个不同的终端... 之前看一些mac设置系统环境 ...
- 「DIARY」PKUSC2021 小结
另外有一个纯吐槽游记版本的,还没有写完(快写完了,真的) 欢迎各路神仙来吐槽一个菜鸡的考场思路 # Day1 考场小结 总体而言,T1 完全就是送分,做得也挺快的:T2 大概是本场最难的题:然后 T3 ...
- win10任务栏图标设置“不合并标签但隐藏文字”
设置如图不分组即可,下载链接 https://files-cdn.cnblogs.com/files/slyuan/7tt_setup.rar