#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++ 文件知识的更多相关文章

  1. 【黑客免杀攻防】读书笔记6 - PE文件知识在免杀中的应用

    0x1 PE文件与免杀思路 基于PE文件结构知识的免杀技术主要用于对抗启发式扫描. 通过修改PE文件中的一些关键点来达到欺骗反病毒软件的目的. 修改区段名 1.1 移动PE文件头位置免杀 工具:PeC ...

  2. 每个开发人员必须知道PDB文件知识

    大多数开发人员都意识到PDB文件有助于您进行调试,但仅此而已.如果你不知道PDB文件是怎么回事,不要觉得很糟糕,因为虽然有文档在那里,但它分散在周围,而且大部分是为编译器和调试器编写器准备的.虽然编写 ...

  3. Android Studio .grade文件知识

    1.位置 2.问题:当AndroidStudio版本不同的时候,导致.gradle文件版本不同(当前为2.10),因为AndroidStudio升级的时候会自动升级.gradle.这样通过svn加载到 ...

  4. python 多文件知识

    对于一个大型的项目,会存在很多个py文件,本文记录与多文件有关的内容. 1. python 如何在一个.py文件中调用另一个.py文件的类 如果是在同一个 module中(也就是同一个py 文件里), ...

  5. Java file文件的写入和读取及下载

    File文件的写入 一.FileWriter 和BufferedWriter 结合写入文件 FileWriter是字符流写入字符到文件.默认情况下,它会使用新的内容代替文件原有的所有内容,但是,当指定 ...

  6. oracle 密码文件文件

    密码文件作用: 密码文件用于dba用户的登录认证. dba用户:具备sysdba和sysoper权限的用户,即oracle的sys和system用户. 本地登录: 1)操作系统认证: [oracle@ ...

  7. 【转】Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题

    转载地址:http://blog.csdn.net/ouyang_peng/article/details/51168072 Android 设备的CPU类型(通常称为”ABIs”) x86: 平板. ...

  8. 我的Android进阶之旅------&gt;Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题

    Android 设备的CPU类型通常称为ABIs 问题描写叙述 解决方法 1解决之前的截图 2解决后的截图 3解决方法 4建议 为什么你须要重点关注so文件 App中可能出错的地方 其它地方也可能出错 ...

  9. Js读取XML文件为List结构

    习惯了C#的List集合,对于Javascript没有list 极为不舒服,在一个利用Js读取XML文件的Demo中,决定自己构建List对象,将数据存入List. 第一步,Js读取XML文件知识 X ...

  10. 【转载】Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题

    转自:[欧阳鹏]http://blog.csdn.net/ouyang_peng Android 设备的CPU类型(通常称为”ABIs”) armeabiv-v7a: 第7代及以上的 ARM 处理器. ...

随机推荐

  1. No.1.7

    网页制作流程 创建根目录(网站的第一级文件夹) 1.图片文件夹:images 2.样式文件夹:CSS 3.首页:index.html <!-- 网站的首页 所有网站的首页都叫index.html ...

  2. gym102586C Sum Modulo

    题意: 给你 \(n,m,k\) 以及\(p_i(1\le i\le n)\) ,保证 \(\sum p_i=1\) 你有一个数 \(X\),一开始 \(X=0\) 每次你会生成一个随机数 \(A\) ...

  3. uniapp 离开界面清除计时器

            onLoad() {             // APP启动引导图逻辑判断显示             if (uni.getStorageSync("startImgSt ...

  4. Source Tree 1、解决打开闪退问题2、解决找不到项目的问题

    闪退问题主要做了两点 1.版本降到3.1.2 下载链接:Sourcetree Download Archives | Sourcetree 2.参考博客做出文件修改参考bigbig猿博客 新建json ...

  5. python 知识点总结

    第一张 1)变量 内存空间的表达式 命名要遵守规则 赋值使用 = 2)类型转换 str()将其他类型转成字符窜 int() 将其他类型转成整数 float()将其他类型转成浮点数 3)数据类型 整数类 ...

  6. 定制个性化echarts 仪表盘

    option = { series: [ { type : "gauge", center: ["50%", "45%"], // 默认全局 ...

  7. Python切换中英文输入法

    要实现中英文切换,首先Windows系统必须要有中文语言和英文语言,才能实现输入法(语言)切换. import win32api import win32gui from win32con impor ...

  8. 上传镜像到harbor

    https://blog.csdn.net/weixin_45335305/article/details/123817541

  9. 同一系统开启两个ftp进程

    1.正常情况是yum 安装vsftpd服务 ,在/etc/vsftpd目录更改配置,起服务.这样启动是一个服务. 2.启动第二个vsftpd服务 #创建虚拟用户 useradd -d /home/vi ...

  10. 关于zookeeper集群的理解

    一.zookeeper集群节点容错性 1.在集群模式下,建议至少部署3个zk进程,或者部署奇数个zk进程.如果只部署2个zk进程,当其中一个zk进程挂掉后,剩下的一个进程并不能构成一个quorum的大 ...