字符存到新文件的第一个字符,以此类推。
10 个解决方案
#1
栈
#2
用文件映射放到内存的一段buffer,然后指针就在buffer中从后往前读写新文件.
#3
void writeBack()
{
QFile file_1("\home\xxx.xxx");
QFile file_2("\home\xxxBack.xxx");
file_1.open(Read_Only);
file_2.open(Raw|Write_Only);
uint fileSize=file_1.size();
QString tmp;
for(uint i=fileSize; i==0; i--)
{
tmp=file_1.readBlock(i, 1);
file_2.writeBlack(fileSize-i, tmp);
}
}
}
{
QFile file_1("\home\xxx.xxx");
QFile file_2("\home\xxxBack.xxx");
file_1.open(Read_Only);
file_2.open(Raw|Write_Only);
uint fileSize=file_1.size();
QString tmp;
for(uint i=fileSize; i==0; i--)
{
tmp=file_1.readBlock(i, 1);
file_2.writeBlack(fileSize-i, tmp);
}
}
}
#4
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<io.h>
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
FILE * stream;
char * lp;
char * temp;//交换区;
unsigned long Len=0;//文件大小;
int fd,err;
fd=_open("f:\\1.txt",_O_RDONLY);//f盘下的文件,你可该路径;
if(fd ==-1)
{
cout<<"不能打开你的文件!"<<endl;
}
else
{
Len=_filelength(fd);
lp = new char[Len];
temp = new char[Len];
_close(fd);//释放文件描述符;
stream=fopen("f:\\1.txt","r+");
fread(lp,sizeof(char),Len,stream);
fclose(stream);
if( (fd = _open("f:\\1.txt", _O_RDWR | _O_CREAT, _S_IREAD | _S_IWRITE )) != -1)
{
for(int i=Len-1;i>=0;i--)
{
temp[Len-1-i]=lp[i];
}
if(err=_write(fd,temp,Len)==-1)
{
cout<<"写入错误!"<<endl;
return 0;
}
else
{
cout<<"写入成功!"<<endl;
_close(fd);//释放文件描述符;
}
}
delete [] temp;
delete [] lp;
}
return 0;
}
不也可不设置文件交换区,把指针从最后字节开始一个字符一个字符考入文件也可。
#include<sys/stat.h>
#include<sys/types.h>
#include<io.h>
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
FILE * stream;
char * lp;
char * temp;//交换区;
unsigned long Len=0;//文件大小;
int fd,err;
fd=_open("f:\\1.txt",_O_RDONLY);//f盘下的文件,你可该路径;
if(fd ==-1)
{
cout<<"不能打开你的文件!"<<endl;
}
else
{
Len=_filelength(fd);
lp = new char[Len];
temp = new char[Len];
_close(fd);//释放文件描述符;
stream=fopen("f:\\1.txt","r+");
fread(lp,sizeof(char),Len,stream);
fclose(stream);
if( (fd = _open("f:\\1.txt", _O_RDWR | _O_CREAT, _S_IREAD | _S_IWRITE )) != -1)
{
for(int i=Len-1;i>=0;i--)
{
temp[Len-1-i]=lp[i];
}
if(err=_write(fd,temp,Len)==-1)
{
cout<<"写入错误!"<<endl;
return 0;
}
else
{
cout<<"写入成功!"<<endl;
_close(fd);//释放文件描述符;
}
}
delete [] temp;
delete [] lp;
}
return 0;
}
不也可不设置文件交换区,把指针从最后字节开始一个字符一个字符考入文件也可。
#5
用STL来做最简单,用一个string来存储文件内容,再reverse,再写入新文件.
#6
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
ifstream input("test.txt");
stringstream temp;
temp << input.rdbuf();
reverse(temp.str().begin(), temp.str().end());
ofstream output("result.txt");
output << temp.rdbuf();
}
#include <algorithm>
using namespace std;
int main() {
ifstream input("test.txt");
stringstream temp;
temp << input.rdbuf();
reverse(temp.str().begin(), temp.str().end());
ofstream output("result.txt");
output << temp.rdbuf();
}
#7
看Windows核心编程的内存映射文件拿一章.你会发现其他的办法都不是啥好办法.
#8
using namespace std;
vector<unsigned char> dataarray;
然后每从文件中读取一个字节数据a就写入dataarray:dataarray.push_back(a);
读取结束后,循环调用用dataarray.pop_back()获取数据逐个写入文件即可。
vector<unsigned char> dataarray;
然后每从文件中读取一个字节数据a就写入dataarray:dataarray.push_back(a);
读取结束后,循环调用用dataarray.pop_back()获取数据逐个写入文件即可。
#9
看了楼上的很多方法,如果文件很大的话好像都没有好好考虑啊。
想到以前用汇编做的作业,每次COPY 1024个Byte,直到整个文件拷贝结束。
所以希望LZ能够考虑一下这个问题。
想到以前用汇编做的作业,每次COPY 1024个Byte,直到整个文件拷贝结束。
所以希望LZ能够考虑一下这个问题。
#10
mark
#1
栈
#2
用文件映射放到内存的一段buffer,然后指针就在buffer中从后往前读写新文件.
#3
void writeBack()
{
QFile file_1("\home\xxx.xxx");
QFile file_2("\home\xxxBack.xxx");
file_1.open(Read_Only);
file_2.open(Raw|Write_Only);
uint fileSize=file_1.size();
QString tmp;
for(uint i=fileSize; i==0; i--)
{
tmp=file_1.readBlock(i, 1);
file_2.writeBlack(fileSize-i, tmp);
}
}
}
{
QFile file_1("\home\xxx.xxx");
QFile file_2("\home\xxxBack.xxx");
file_1.open(Read_Only);
file_2.open(Raw|Write_Only);
uint fileSize=file_1.size();
QString tmp;
for(uint i=fileSize; i==0; i--)
{
tmp=file_1.readBlock(i, 1);
file_2.writeBlack(fileSize-i, tmp);
}
}
}
#4
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<io.h>
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
FILE * stream;
char * lp;
char * temp;//交换区;
unsigned long Len=0;//文件大小;
int fd,err;
fd=_open("f:\\1.txt",_O_RDONLY);//f盘下的文件,你可该路径;
if(fd ==-1)
{
cout<<"不能打开你的文件!"<<endl;
}
else
{
Len=_filelength(fd);
lp = new char[Len];
temp = new char[Len];
_close(fd);//释放文件描述符;
stream=fopen("f:\\1.txt","r+");
fread(lp,sizeof(char),Len,stream);
fclose(stream);
if( (fd = _open("f:\\1.txt", _O_RDWR | _O_CREAT, _S_IREAD | _S_IWRITE )) != -1)
{
for(int i=Len-1;i>=0;i--)
{
temp[Len-1-i]=lp[i];
}
if(err=_write(fd,temp,Len)==-1)
{
cout<<"写入错误!"<<endl;
return 0;
}
else
{
cout<<"写入成功!"<<endl;
_close(fd);//释放文件描述符;
}
}
delete [] temp;
delete [] lp;
}
return 0;
}
不也可不设置文件交换区,把指针从最后字节开始一个字符一个字符考入文件也可。
#include<sys/stat.h>
#include<sys/types.h>
#include<io.h>
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
FILE * stream;
char * lp;
char * temp;//交换区;
unsigned long Len=0;//文件大小;
int fd,err;
fd=_open("f:\\1.txt",_O_RDONLY);//f盘下的文件,你可该路径;
if(fd ==-1)
{
cout<<"不能打开你的文件!"<<endl;
}
else
{
Len=_filelength(fd);
lp = new char[Len];
temp = new char[Len];
_close(fd);//释放文件描述符;
stream=fopen("f:\\1.txt","r+");
fread(lp,sizeof(char),Len,stream);
fclose(stream);
if( (fd = _open("f:\\1.txt", _O_RDWR | _O_CREAT, _S_IREAD | _S_IWRITE )) != -1)
{
for(int i=Len-1;i>=0;i--)
{
temp[Len-1-i]=lp[i];
}
if(err=_write(fd,temp,Len)==-1)
{
cout<<"写入错误!"<<endl;
return 0;
}
else
{
cout<<"写入成功!"<<endl;
_close(fd);//释放文件描述符;
}
}
delete [] temp;
delete [] lp;
}
return 0;
}
不也可不设置文件交换区,把指针从最后字节开始一个字符一个字符考入文件也可。
#5
用STL来做最简单,用一个string来存储文件内容,再reverse,再写入新文件.
#6
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
ifstream input("test.txt");
stringstream temp;
temp << input.rdbuf();
reverse(temp.str().begin(), temp.str().end());
ofstream output("result.txt");
output << temp.rdbuf();
}
#include <algorithm>
using namespace std;
int main() {
ifstream input("test.txt");
stringstream temp;
temp << input.rdbuf();
reverse(temp.str().begin(), temp.str().end());
ofstream output("result.txt");
output << temp.rdbuf();
}
#7
看Windows核心编程的内存映射文件拿一章.你会发现其他的办法都不是啥好办法.
#8
using namespace std;
vector<unsigned char> dataarray;
然后每从文件中读取一个字节数据a就写入dataarray:dataarray.push_back(a);
读取结束后,循环调用用dataarray.pop_back()获取数据逐个写入文件即可。
vector<unsigned char> dataarray;
然后每从文件中读取一个字节数据a就写入dataarray:dataarray.push_back(a);
读取结束后,循环调用用dataarray.pop_back()获取数据逐个写入文件即可。
#9
看了楼上的很多方法,如果文件很大的话好像都没有好好考虑啊。
想到以前用汇编做的作业,每次COPY 1024个Byte,直到整个文件拷贝结束。
所以希望LZ能够考虑一下这个问题。
想到以前用汇编做的作业,每次COPY 1024个Byte,直到整个文件拷贝结束。
所以希望LZ能够考虑一下这个问题。
#10
mark