在学习过程中,接触到到了文件复制、删除、插入的课程,之后自己按照教程功能,编写了代码;经过数次修改完善,终于得到了一份让自己稍微满意的代码;
实现了以下功能:
1、整体复制文件,默认在程序所在目录下的文件,通过输入完整路径,可实现任意文件的复制;
2、整体删除文件,默认在程序所在目录下的文件,通过输入完整路径,可实现任意文件的删除;
3、插入文件,在源文件的任意位置,插入新文件中,任意位置,任意长度的内容;
4、删除文件,在源文件的任意位置,删除任意长度的内容;
5、以上步骤执行过程中,模拟了进度显示,根据文件大小改变进度显示
6、执行完成后,文件大小的显示
ps:功能 3 的实现思路:
1、复制源文件偏移量之前的内容到临时文件;
2、复制插入文件要插入的内容到临时文件;
3、复制源文件偏移量之后的内容到临时文件;
4、删除源文件,将临时文件重命名为源文件名;
功能 4 的实现思路:
1、复制源文件偏移量之前的内容到临时文件;
2、复制要偏移量和要删除内容大小之后的内容到临时文件;
3、删除源文件,将临时文件重命名为源文件名;
涉及的其他内容:
1、获取文件大小,这里如果用fseek ,ftell两个函数,会受到 整形 long 取值范围的限制,所以采用了另一种方式,可以参考;
2、获取光标位置,设置光标位置,设置字体颜色功能记录
3、源文件同目录下创建临时文件方法 记录
4、绘制选项框方法记录
5、VS2017下编译运行通过,对80+M文件测试,2+G 文件测试没有问题。
仅在此留作记录,供交流
运行情况:
自我感觉还可以的了;
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<sys/stat.h>
long x, y;
long psx, psy;
long sp = 1;
//获取光标位置
void getCursorPosition(long *x, long *y)
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coordScreen = { 0, 0 }; //光标位置
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(hConsole, &csbi);
*x = csbi.dwCursorPosition.X;
*y = csbi.dwCursorPosition.Y;
}
//自定义的光标定位函数
void setCursorPosition(long x, long y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUT