帮你搞好了:
你想要是实现就是文件的复制吧,大小写要转换。
问题出现在下面:
file1.open(s,ios::in);
file2.open(t,ios::out,ios::_Noreplace);
首先你传送的是字符串,而C++的字符串当做指针来用时,需要用stringname.c_str()转换C-string的形式,既得到一个 const char*,而这个const char* 所指向的字符串,刚好是你的文件名字变成符合的char*型(如果没明白的话就追问我把)
在C++标注库中ios::_Noreplace已经无法使用,你要是想不覆盖原来的文件,只需要加入ios::app就行,这个就是在文件的末位加入,不修改原来的文件!
改成如下之后,就OK
file1.open(s.c_str(),ios::in);
file2.open(t.c_str(),ios::out|ios::app);
希望对你有点帮助
1. 打开输入文件后,需要禁止它跳过空格
file1 >> noskipws;
加到你的while()循环前面
2. file1.eof()需要在读字符之后判断
fstream只有发生过读字符失败,才对eof标志置位
而eof一旦置位,表示最后一次读操作是失败的
改为
file1 >> noskipws;
while(1)
{
file1>>c;
if (file1.eof())
break;
if(c>=65&&c<=90)
//VC6.0测试
//Noreplace不能用,被我灭了
//string类型也不行,改了
#include
#include
#include
using namespace std;
void Convert(char* s,char* t)
{
fstream file1,file2;
file1.open(s,ios::in);
file2.open(t,ios::out);
if(!file1)
{
cout<<"打开源文件失败,退出程序。"<
}
if(!file2)
{
cout<<"创建目标文件失败,退出程序。"<
}
file1 >> noskipws;//C++用的不多,这个参看楼上了
char c;
while(1)
{
file1>>c;
if(file1.eof())//file1.eof()需要在读字符之后判断,顶楼上
break;
cout<<"file1 "<
{
c+=32;
}
else if(c>=97&&c<=122)
{
c-=32;
}
file2<
file1.close();
file2.close();
}
int main(void)
{
cout<<"请输入要转换的文件名:";
char filename1[20];
cin>>filename1;
cout<<"请输入目标文件名:";
char filename2[20];
cin>>filename2;
Convert(filename1,filename2);
return 0;
}