cpp文件处理

  1 #include <iostream>
  2 #include <fstream>
  3 using namespace std;
  4 
  5 void file_wr(){
  6     char data[100];
  7     //打开文件
  8     ofstream outfile;
  9     outfile.open("demo.dat");
 10     cout<<"write to the file"<<endl;
 11 
 12     cout<<"put in some world one"<<endl;
 13     cin.getline(data,100);
 14 
 15     //向文件输入用户输入值
 16     outfile<<data<<endl;
 17 
 18     cout<<"put in some world two"<<endl;
 19     cin>>data;
 20     cin.ignore();
 21 
 22     //向文件输入用户输入值
 23     outfile<<data<<endl;
 24     outfile.close();//关闭
 25 
 26     //读模式打开
 27     ifstream infile;
 28     infile.open("demo.dat");
 29 
 30     cout<<"read from the file"<<endl;
 31 
 32     infile>>data;
 33     cout<<data<<endl;
 34 
 35     infile>>data;
 36     cout<<data<<endl;
 37 
 38     infile.close();
 39  //   return 0;
 40 }
 41 
 42 int main(){
 43     file_wr();
 44     return 0;
 45 }
 46 
 47 #if 0
 48 class Adder{
 49     public:
 50         //构造函数
 51         Adder(int i=0){
 52             total=i;
 53         }
 54 
 55         void addNum(int number){
 56             total +=number;//在此处累加
 57         }
 58         int getTotal(){
 59             return total;
 60         }
 61     private:
 62         //对外隐藏的数据
 63         int total;
 64 
 65 };
 66 
 67 
 68 //基类
 69 class Box{
 70     public:
 71         //纯虚函数
 72         virtual int getArea()=0;
 73 
 74         void setBreadth(int b){
 75             breadth=b;
 76         }
 77         void setHeight(int h){
 78             height=h;
 79         }
 80         void setLength(int l){
 81             length=l;
 82         }
 83     protected:
 84         int height;
 85         int length;
 86         int breadth;
 87 };
 88 
 89 //派生类
 90 class Renct:public Box{
 91     public:
 92     //与纯虚函数同名
 93         int getArea(){
 94             return (breadth * height *length);
 95         }
 96 };
 97 
 98 class Tenct:public Box{
 99     public:
100     //与纯虚函数同名
101         int getArea(){
102             return (height * length)/2;
103         }
104 };
105 
106 void open(const char *filename,ios::openmode mode){
107 
108 }
109 
110 int main(void)
111 {
112 #if 0
113     Adder b;
114     b.addNum(10);
115     b.addNum(20);
116     b.addNum(50);
117     b.addNum(120);
118 
119     cout<<"Total:"<<b.getTotal()<<endl;
120 #endif
121 
122     Renct acc;
123     Tenct bcc;
124 
125     acc.setBreadth(5);
126     acc.setHeight(4);
127     acc.setLength(3);
128 
129     bcc.setHeight(2);
130     bcc.setLength(3);
131 
132     cout<<"Tenct:"<<acc.getArea()<<endl;
133     cout<<"Teb:"<<bcc.getArea()<<endl;
134 
135     return 0;
136 }
137 #endif

 

转载于:https://www.cnblogs.com/Blue-Moniter4/p/9482332.html

<think>好的,我现在需要帮助用户解决一个批处理脚本的问题。用户的需求是对当前目录下所有.cpp文件进行操作,包括创建同名.yycom文件,复制内容,删除原文件,然后将.yycom重命名回.cpp。听起来用户可能是在尝试某种文件处理或转换,比如编码转换、内容过滤等,但暂时不清楚具体用途。首先,我需要确认用户的具体步骤是否正确。用户提到的步骤是:创建.yycom文件,复制内容,删除原.cpp文件,再重命名。这看起来像是在原地处理文件,但中间通过一个临时文件来过渡。通常,这样的操作可能需要确保在操作过程中不会丢失数据,尤其是在删除原文件之前必须确保新文件已经正确创建并包含正确内容。 接下来,我需要考虑批处理脚本的实现方式。对于每个.cpp文件,需要执行以下步骤: 1.创建同名的.yycom文件。2.将原.cpp文件的内容复制到.yycom。3.删除原.cpp文件。4.将.yycom文件重命名为原.cpp文件名。在Windows批处理中,可以使用for循环遍历所有.cpp文件。然后,对于每个文件,使用copy命令复制内容到新文件,del删除原文件,ren重命名新文件。需要注意的是,批处理中的变量扩展可能需要延迟扩展,尤其是在循环体内修改变量时。例如,在for循环中,如果使用%%f作为循环变量,可能需要使用延迟扩展来正确处理变量。 另外,用户可能希望保留原文件的名称,只是修改扩展名。因此,需要提取文件名(不带扩展名),然后加上.yycom扩展名。在批处理中,可以使用%~nf来获取不带扩展名的文件名,然后加上.yycom。接下来,我需要测试这些步骤是否可行。例如,有一个test.cpp文件,执行copytest.cpp test.yycom,然后deltest.cpp,再ren test.yycom test.cpp。这样操作后,test.cpp应该存在,内容与原文件一致。但需要注意的是,如果在复制过程中出现问题,比如文件正在被使用,可能导致复制失败,而原文件已被删除,这会导致数据丢失。因此,可能需要确保在复制成功后再删除原文件,或者在脚本中添加错误处理。此外,批处理脚本中的命令顺序也很重要。例如,必须先复制文件,再删除原文件,最后重命名。或者,是否可以在复制后直接重命名,而不需要删除?例如,复制到.yycom后,删除原文件,然后将.yycom改为.cpp。这可能与用户的需求有关,用户可能需要在处理过程中保留中间文件,或者在处理完成后恢复原扩展名。另外,用户提到“复制内容”,是否需要执行某种处理,还是直接复制?根据用户的问题描述,可能只是直接复制内容,没有修改。但如果是这样,整个过程相当于重命名文件,而用户可能实际需要的是其他操作,比如在复制过程中修改内容。但根据用户的问题,可能只是需要保留内容,所以直接复制即可。 还需要考虑批处理脚本中的路径问题。当前目录下是否有子目录?用户可能只需要处理当前目录下的.cpp文件,不包括子目录。因此,在for循环中使用*.cpp即可,不需要/r选项。 综合以上分析,批处理脚本的大致结构如下:@echooffsetlocalenabledelayedexpansionfor%%fin (*.cpp) do(echo Processing%%f...copy "%%f" "%%~nf.yycom" >nuldel "%%f"ren "%%~nf.yycom" "%%~nf.cpp" )endlocal这里使用enabledelayedexpansion来确保变量在循环体内正确扩展。copy命令将原文件复制到.yycom,然后删除原文件,最后重命名。需要注意的是,重命名时,目标文件名必须是仅文件名部分,不能包含路径,因此使用%%~nf获取不带扩展名的部分。但是,这里可能存在一个问题:当del命令删除原文件后,如果重命名失败,会导致.yycom文件残留。不过,在正常情况下,ren命令应该能够正确执行,因为.yycom文件已经存在。此外,copy命令的>nul是为了隐藏输出信息,使脚本更简洁。 另外,是否需要考虑文件只读属性?如果原文件是只读的,del可能会提示确认,但使用del/f可以强制删除。不过用户的问题中没有提到这种情况,可能默认情况下文件是可写的。测试这个脚本,假设当前目录下有a.cpp和b.cpp。运行脚本后,会生成a.yycom和b.yycom,复制内容后删除原文件,然后重命名为a.cpp和b.cpp。整个过程完成后,文件应该和原来一样,但中间经过复制和删除步骤。可能用户的实际需求是在复制过程中修改内容,但根据当前问题描述,用户只是需要复制内容,所以脚本可能看起来没有实际效果。因此,可能需要进一步询问用户是否需要在复制过程中处理内容,或者是否有其他步骤。但根据用户的问题,可能只是需要这样的脚本结构,实际的内容处理可能在其他地方完成,比如在生成.yycom文件时进行某种处理,但用户的问题中没有提到,因此按直接复制处理。 总结,这个脚本应该可以满足用户的需求,但需要用户确认是否需要中间处理步骤。如果没有,脚本正确无误;如果需要处理内容,则需要在复制时添加处理命令,比如使用其他工具或脚本处理文件内容,再复制到.yycom中。</think>以下是实现该需求的批处理脚本及分步说明: ```bat @echo off setlocal enabledelayedexpansion for %%f in (*.cpp) do ( echo 正在处理文件: %%f copy "%%f" "%%~nf.yycom" >nul del /q "%%f" ren "%%~nf.yycom" "%%~nf.cpp" echo 完成处理: %%~nf.cpp ) endlocal echo 所有.cpp文件处理完成! pause ``` **步骤解析:** 1. `@echo off` 关闭命令回显保持界面整洁 2. `setlocal enabledelayedexpansion` 启用延迟变量扩展 3. `for %%f in (*.cpp)` 遍历当前目录所有.cpp文件 4. `copy "%%f" "%%~nf.yycom"` 创建同名.yycom文件并复制内容 5. `del /q` 静默删除原文件 6. `ren` 将.yycom文件重命名回.cpp 7. `%%~nf` 表示不带扩展名的文件名 **注意事项:** - 建议先备份文件再执行操作 - 需要管理员权限才能处理受保护文件 - 路径中不要包含特殊字符(如&、^等) - 处理前关闭所有正在使用.cpp文件的程序[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值