c实现 简单的文件管理 不含交互
实现如下功能:
2、在C盘创建一个以个人姓名命名的目录(比如:张三)
3、在目录下创建一个文件,并写入自定义内容(比如文件名:abc.txt)
4、把上面所创建的文件复制到D盘
5、对上面复制到D盘的文件进行文件内容的追加
6、对D盘的文件实施改名操作
7、实现从文件中搜索是否存在用户输入的关键字信息(比如有文件abc.txt,接收用 户输入jdbc,查询一下在abc.txt中是否存在以及有多少次出现jdbc相关文字,类似 于一个文件浏览器)
8、把原文件移动到另一个位置(位置自定义),移动即不保留原文件。
#include <iostream>
#include <string.h>
#include <io.h>
#include <direct.h>
#include<sys/stat.h>
#include<sys/types.h>
#include <stdlib.h>
#include <windows.h>
#include<stdio.h>
#include <fstream>
using namespace std; /*1、读取指定目录下的所有子目录和文件信息(比如:指定目录为C:/temp则把此目录 下的所有子目录下的文件信息读出来)*/
//深度优先递归遍历当前目录下文件夹和文件及子文件夹和文件
void DfsFolder(string path,int layer)
{
_finddata_t file_info;
string current_path=path+"/*.*"; //也可以用/*来匹配所有
int handle=_findfirst(current_path.c_str(),&file_info);
//返回值为-1则查找失败
if(-==handle)
{
cout<<"cannot match the path"<<endl;
return;
}
do
{
//判断是否子目录
if(file_info.attrib==_A_SUBDIR)
{
//递归遍历子目录
//打印记号反映出深度层次
for(int i=; i<layer; i++)
cout<<"--";
cout<<file_info.name<<endl;
int layer_tmp=layer;
if(strcmp(file_info.name,"..")!=&&strcmp(file_info.name,".")!=) //.是当前目录,..是上层目录,必须排除掉这两种情况
DfsFolder(path+'/'+file_info.name,layer_tmp+); //再windows下可以用\\转义分隔符,不推荐
}
else
{
//打印记号反映出深度层次
for(int i=; i<layer; i++)
cout<<"--";
cout<<file_info.name<<endl;
}
}
while(!_findnext(handle,&file_info)); //返回0则遍历完
//关闭文件句柄
_findclose(handle);
} /*2.创建文件夹目录*/
void create_folder(char szDirName[])
{
bool flag = CreateDirectory(szDirName, NULL);
DWORD err = GetLastError();
if(flag==&&err==)
{
printf("Create success\n");
}
else
{
printf("Create failure, change folders already exist\n");
}
} /*3、在目录下创建一个文件,并写入自定义内容(比如文件名:abc.txt)*/
int create_file_and_write_content(char s[],char path[])
{
FILE*fp=NULL;//需要注意
fp=fopen(path,"w"); //创建文件
if(NULL==fp) return -;//要返回错误代码
fprintf(fp,"%s",s); //从控制台中读入并在文本输出
fclose(fp);
fp=NULL;//需要指向空,否则会指向原打开文件地址
} /*4、把上面所创建的文件复制到D盘*/
void copy_file(char source[],char destination[])
{
CopyFile(source,destination,false);//覆盖
} /*5、对上面复制到D盘的文件进行文件内容的追加*/
void file_content_addition(char str[],char path[])
{
FILE*fp=NULL;
fp=fopen(path,"a");// a 尾部追加数据
if(NULL==fp) return ;
fprintf(fp,"%s",str);
fclose(fp);
fp=NULL;
}
/*6、对D盘的文件实施改名操作*/
void file_rename(char oldname[],char newname[])
{
int result= rename( oldname, newname );
if ( result == )
puts ( "File successfully renamed" );
else
perror( "Error renaming file" ); } /*KMP*/
void getnext(char a[],int l,int next[])
{
//a字符串数组为子串,l为字符串a的长度,next为a的匹配值数组
int j;
int k=;
next[]=;//初始化
j=;
while(j<=l-)
{
if(k==)//a[0]和a[x]比较
{
if(a[k]==a[j])
{ k++;//k向后移动一位
next[j]=k;
j++;
}
else
{
//k不动
next[j]=k;
j++;
}
}
if(k!=)//k此时不在a[0]的位置上
{
if(a[k]==a[j])
{
k++;//k后移一位
next[j]=k;
j++;//j后移一位
}
else
{
k=;//k重新回到a[0]
}
}
}
}
int KMP(char str[],char a[])
{
int L=strlen(str);//字符串长度
int l=strlen(a);
int i,j;
i=j=;
int next[l];
getnext(a,l,next);//活动匹配值数组
int sum=;//匹配成功的次数
while(i<=L&&j<=l)
{
if(str[i]==a[j]&&j==)//匹配中的四种情况
{
i++;
j++;
}
else if(str[i]==a[j]&&j!=)
{
i++;
j++;
}
else if(str[i]!=a[j]&&j==)
{
j=;
i++;
}
else if(str[i]!=a[j]&&j!=)
{
int s=j-next[j-];
i=i-j+s;
j=;
}
if(j==l)//匹配成功的条件
{
//printf("第%d此成功匹配的位置为:%d\n",sum,i-l);
sum++;
}
}
return sum;
} /*
7、实现从文件中搜索是否存在用户输入的关键字信息
(比如有文件abc.txt,接收用 户输入jdbc,
查询一下在abc.txt中是否存在
以及有多少次出现jdbc相关文字,类似 于一个文件浏览器)
ps:采用了KMP算法优化
*/
int count_str_appear_num(char path[],char str2[])
{
FILE*fp=NULL;
fp=fopen(path,"r");//
if(NULL==fp) return ; char str1[];
fscanf(fp,"%s",str1);
str1[strlen(str1)]='\0'; fclose(fp);
fp=NULL; int sum=KMP(str1,str2);
if(sum==)
{
printf("文件中不存在改字符串\n");
}
else
{
printf("文件中存在该字符串,出现次数为:%d\n",sum);
}
} /*8、把原文件移动到另一个位置(位置自定义),
移动即不保留原文件。 */
void move_file(char source[],char destination[])
{
CopyFile(source,destination,false);
//remove(source);
cout<<"移动成功\n";
}
int main(int argc,char *argv[])
{
//递归遍历文件夹
//DfsFolder("D:\masm",0); // create_folder("D:\\masm\\test"); // create_file_and_write_content("这是一个写入的内容","D:\\masm\\test1.txt"); //copy_file("D:\\masm\\test1.txt","D:\\test2.txt"); //file_content_addition("\n这是一个追加的内容","D:\\test2.txt"); // file_rename("D:\\test2.txt","D:\\test888.txt"); //count_str_appear_num("D:\\masm\\test1.txt","abc"); // move_file("D:\\masm\\test1.txt","D:\\test1.txt");
return ; }
c实现 简单的文件管理 不含交互的更多相关文章
- Linux含交互的自动登录脚本
近来经常要通过ssh登录服务器,每次输入命令和密码很麻烦,查资料发现有两种解决,一种是本地创建密钥直接登录,另一种是写个脚本. 这里介绍第二种方法,第一种资料也很多,但是觉得没啥意思. 先上脚本: # ...
- 130ftp-python3 FTP简单实现文件下载(含中文乱码问题)
130ftp-python3 FTP简单实现文件下载(含中文乱码问题) python3 FTP简单实现文件下载(含中文乱码问题) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- 一个简单的ObjC和JavaScript交互工具
https://github.com/changjianfeishui/XBWebBridge ObjectiveC与Js交互是常见的需求,可对于新手或者所谓的高手而言,其实并不是那么简单明了.这里只 ...
- php之简单的文件管理(基本功能)
(1)先要想好要操作哪个文件? (2)确定文件的路径? (3)要有什么文件管理功能? 一.先做一下简单的查看文件功能,文件中的文件和文件夹都显示,但是双击文件夹可以显示下一级子目录,双击"返 ...
- 简单css实现input提示交互动画效果
通过基础CSS实现输入提示交互动画效果,并兼容各浏览器! 1.效果展示 2.css代码 h4 { margin: 30px 0; } input { margin:; font-size: 16px; ...
- 一个简单的后台与数据库交互的登录与注册[sql注入处理,以及MD5加密]
一.工具: vs2013[因为我现在用的也是2013,版本随便你自己开心] sql2008[准备过久升级] 二.用到的语言: HTML+CSS+Jquery+Ajax+sqlserver HTML[相 ...
- MFC实现简单飞机大战(含游戏声音)
1 实验内容 本实验主要是实现简单的飞机大战游戏,包含游戏声音.碰撞后爆炸效果,有大小敌机等.所用到的知识点如下: 1.贴图技术 2.飞机类.子弹类实现 3.位图移动 4.碰撞判断,实现爆炸效果 5. ...
- Raknet实现的简单服务器与客户端的交互
1. 首先下载Raknet的源代码,我用的是4.0的,不是最新的,解压后编译DLL工程,编译完成后进入解压的根目录下,进入Lib文件夹下找到RakNet_DLL_Debug_Win32.dll, R ...
- PHP的简单易懂文件管理,可实现基本功能
我们利用的是嵌入PHP代码和ajax结合的方式,首相想到的是利用遍历文件的方式找出分件下的目录和文件,并且找到它们的路径,使用 dirname取上级目录, basename从完整路径中取文件名,其中最 ...
随机推荐
- [AngularJS] “路由”的定义概念、使用详解——AngularJS学习资料教程
这是小编的一些学习资料,理论上只是为了自己以后学习需要的,但是还是需要认真对待的 以下内容仅供参考,请慎重使用学习 AngularJS“路由”的定义概念 AngularJS最近真的很火,很多同事啊同学 ...
- Python爬虫学习记录【内附代码、详细步骤】
引言: 昨天在网易云课堂自学了<Python网络爬虫实战>,视频链接 老师讲的很清晰,跟着实践一遍就能掌握爬虫基础了,强烈推荐! 另外,在网上看到一位学友整理的课程记录,非常详细,可以优先 ...
- ES6新语法之let关键字;有别于传统关键字var的使用
ES6新语法于2015年发布:而我这个前端小白在17年才接触到.惭愧惭愧!!不过到目前为止,似乎只有FireFox和Chrome对ES6的支持相对良好.不过既然人家ES6已经出来了,还是要跟上技术的潮 ...
- ArcGIS Google Map 增加虚拟图层(MapImageLayer)(转载)
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...
- screen 状态为Attached 连不上
用 screen -ls, 显式当前状态为Attached, 但当前没有用户登陆些会话.screen此时正常状态应该为(Detached) 此时用screen -r ,怎么也登不上. 最后找到解决方 ...
- 可执行文件patch技术&&持续更新
前言 在ctf比赛中, 有时我们需要对可执行文件进行patch, 或者在植入后门时,patch也是常用的手段.不过手工patch比较麻烦,下面介绍几个工具.本文介绍遇到的各种技术,不断更新. ELF ...
- linux客户端打印报表时操作系统的配置
报表打印是用applet方式操作的,所以客户端要有jre环境.如果客户端是windows系统的话,安装jre环境比较方便:如果客户端是linux系统的话,即使服务器端reportConfig.x ...
- the detailed annotation of StringBuilder
public int capacity() 返回当前容量.容量指可用于最新插入字符的存储量,超过这一容量便需要再次分配. 返回: 当前容量. public int length() 返回长度(字符数) ...
- Centos 安装Dokuwiki
一.前言 DokuWiki是一个开源wiki引擎程序,运行于PHP环境下.DokuWiki程序小巧而功能强大.灵活,适合中小团队和个人网站知识库的管理. 二.环境 在centos6 下安装apache ...
- innodb crash
今天上午同事处理了一个innodb crash 的问题,没有备份,如何恢复? 查看日志: 180928 8:42:44 InnoDB: Error: page 163855 log sequence ...