csharp大文件上传如何做断点续传
357 2023-04-03 05:16:37
程序运行时产生的数据都属于零食数据,程序一旦运行结束,就会被释放
通过文件可以将数据持久化
C++中对文件的操作包含头文件
文件类型分为两种
操作文件的三大类
包含头文件
#include<fstream>
创建流对象
ofstream ofs;
打开文件
ofs.open("文件路径",打开方式);
写数据
ofs << "写入的数据";
关闭文件
ofs.cloSe()
#include<iostream>#include<fstream> //添加头文件using namespace std;void test01(){ofstream ofs; //创建流对象ofs.open("test.txt",ios::out); //打开的地址和方式ofs << "你好" << endl; //文件的内容ofs.close(); //关闭文件}int main(int argc, char** argv) {test01();return 0;}
步骤相对于写文件多一点
包含头文件
#include<fstream>
创建流对象
ifstream ifs;
打开文件并判断释放打开成功
ifs.open("文件路径",打开方式);if(!ifs.is_open()){cout << "文件打开失败" << endl;return;}else{...}
读数据
一共四种...
关闭文件
ifs.cloSe()
#include<iostream>#include<fstream>#include<cstring>using namespace std;void test01(){ifstream ifs;ifs.open("test.txt",ios::in);if(!ifs.is_open()){ //判断是否打开成功cout << "文件打开失败" << endl;return;}else{//第一种//char buf[1024] = {0};//while(ifs >> buf){ //将ifs的数据放入buf中,当数据读完时,返回false,结束循环(不读取数据)//cout << buf <<endl;//} //第二种//char buf[1024] = {0};//while (ifs.getline(buf,sizeof(buf))){ //getline:一行一行的读取//cout << buf << endl;//}//} //第三种// string buf;//while(getline(ifs,buf)){ //ifs一行一行读到buf中//cout << buf << endl;//} //第四种(不建议用)char c;while((c = ifs.get()) != EOF){ //EOF :文件的尾部标志cout << c; //不要加endl;}ifs.close(); //关闭文件 }}int main(int argc, char** argv) {test01();return 0;}
在上面代码的基础上将已经创建好的test.txt文件复制到test1.txt文件下
#include<fstream> //添加头文件#include<iostream>#include<cstring>using namespace std; void test01(){ofstream ofs; //创建对象ifstream ifs; ifs.open("test.txt",ios::in); //路径和方式ofs.open("test1.txt",ios::out); if(!ifs.is_open()){ //复制过程cout << "文件打开失败" << endl; //判断是否打开成功 return;}else{string buf; while(getline(ifs,buf)){ //读文件ofs << buf << "(test.txt复制成功)" << endl; //写(复制)文件 // 添加标识,判断复制是否成功}} ofs.close(); //关闭文件ifs.close();}int main(int argc, char** argv) {test01();return 0;}
在以二进制读、写文件的时候要加多加一个‘ios::binary’
二进制方式读文件主要利用流对象调用函数write(读出的部分数据看不懂没有关系,只要还能读回来就可以啦)
函数类型:ofs.write((const char *) &buffer,int len);
参数解释:buffer指向内存中的一段数据;len是要读取的字节数
#include<fstream>#include<iostream>using namespace std; class Person{ //写个类读读public:char m_Name[64]; //最好用charint m_Age;};void test01(){ofstream ofs("Person.txt",ios::binary | ios::out); //可以一步写哦//ofs.open("Person.txt",ios::binary | ios::out); Person p = {"Tom" ,18}; //造个对象 ofs.write((const char*)&p,sizeof(p)); //用write函数读出来ofs.close();}int main(int argc, char** argv) {test01();return 0;}
二进制方式读文件主要利用流对象调用函数read
函数类型:ofs.read((const char *) &buffer,int len);
参数解释:buffer指向内存中的一段数据;len是要读取的字节数
#include<fstream> //是同一个Person,年龄是20咯(类哦)#include<iostream> //我把读的也写进来了,这样更灵活一点using namespace std; class Person{public:char m_Name[64];int m_Age;};void test01(){ //写文件ofstream ofs("Person.txt",ios::binary | ios::out); //可以一步写哦//ofs.open("Person.txt",ios::binary | ios::out);Person p = {"Tom" 20}; //改个对象的参数()ofs.write((const char*)&p,sizeof(p)); ofs.close(); //读文件ifstream ifs("Person.txt",ios::binary | ios::in); if(!(ifs.is_open())){cout << "文件打开失败" << endl;return;}else{Person p;ifs.read((char*)&p,sizeof(p));cout << p.m_Name << p.m_Age <<endl;}ifs.close();}int main(int argc, char** argv) {test01();return 0;}
为进一步验证是对同一个文件操作,可以做如下检验
else{ Person p = {"Petter",250};//再次修改ifs.read((char*) &p,sizeof(p)); cout << p.m_Name << p.m_Age <<endl;}