实现如下功能:

1、读取指定目录下的所有子目录和文件信息(比如:指定目录为C:/temp则把此目录 下的所有子目录下的文件信息读出来)
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实现 简单的文件管理 不含交互的更多相关文章

  1. Linux含交互的自动登录脚本

    近来经常要通过ssh登录服务器,每次输入命令和密码很麻烦,查资料发现有两种解决,一种是本地创建密钥直接登录,另一种是写个脚本. 这里介绍第二种方法,第一种资料也很多,但是觉得没啥意思. 先上脚本: # ...

  2. 130ftp-python3 FTP简单实现文件下载(含中文乱码问题)

    130ftp-python3 FTP简单实现文件下载(含中文乱码问题) python3 FTP简单实现文件下载(含中文乱码问题) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  3. 一个简单的ObjC和JavaScript交互工具

    https://github.com/changjianfeishui/XBWebBridge ObjectiveC与Js交互是常见的需求,可对于新手或者所谓的高手而言,其实并不是那么简单明了.这里只 ...

  4. php之简单的文件管理(基本功能)

    (1)先要想好要操作哪个文件? (2)确定文件的路径? (3)要有什么文件管理功能? 一.先做一下简单的查看文件功能,文件中的文件和文件夹都显示,但是双击文件夹可以显示下一级子目录,双击"返 ...

  5. 简单css实现input提示交互动画效果

    通过基础CSS实现输入提示交互动画效果,并兼容各浏览器! 1.效果展示 2.css代码 h4 { margin: 30px 0; } input { margin:; font-size: 16px; ...

  6. 一个简单的后台与数据库交互的登录与注册[sql注入处理,以及MD5加密]

    一.工具: vs2013[因为我现在用的也是2013,版本随便你自己开心] sql2008[准备过久升级] 二.用到的语言: HTML+CSS+Jquery+Ajax+sqlserver HTML[相 ...

  7. MFC实现简单飞机大战(含游戏声音)

    1 实验内容 本实验主要是实现简单的飞机大战游戏,包含游戏声音.碰撞后爆炸效果,有大小敌机等.所用到的知识点如下: 1.贴图技术 2.飞机类.子弹类实现 3.位图移动 4.碰撞判断,实现爆炸效果 5. ...

  8. Raknet实现的简单服务器与客户端的交互

    1. 首先下载Raknet的源代码,我用的是4.0的,不是最新的,解压后编译DLL工程,编译完成后进入解压的根目录下,进入Lib文件夹下找到RakNet_DLL_Debug_Win32.dll,  R ...

  9. PHP的简单易懂文件管理,可实现基本功能

    我们利用的是嵌入PHP代码和ajax结合的方式,首相想到的是利用遍历文件的方式找出分件下的目录和文件,并且找到它们的路径,使用 dirname取上级目录, basename从完整路径中取文件名,其中最 ...

随机推荐

  1. AE三维点击查询(3D Identify)的实现(转)

    AE三维点击查询(3D Identify)的实现,类似ArcGIS的Identify对话框/////////////////////////////////////////////////////// ...

  2. idea springboot应用启动

    在idea里启动springboot应用最好使用 spring-boot:run 如果通过运行main方法启动应用,会找不到页面

  3. lsnrctl 与 tnsnames.ora 的联系

    平台:Windoxs XP+Oracle 11G 当使用oralce的 Net Manager创建了一个名为“L3”的Listener后,要想使用lsnrctl启动和关闭 L3 还必须在tnsname ...

  4. 9 tensorflow提示in different while loops的错误该如何解决

    示例代码 ii=tf.constant(0,dtype=tf.int32) loop__cond=lambda a: tf.less(a,sentence_length) loop__vars=[ii ...

  5. 【Java】操作mysql数据库

    package bd; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; im ...

  6. 手动搭建 redis 集群

    转自http://meia.fun/article/1544161420745 手动搭建 redis 集群 redis 基本命令: 启动 redis 服务:redis-server xxx.conf ...

  7. PMF:为何硅谷大神把它念奉为创业公司“唯一重要的东西”

    产品-市场匹配(Product-market fit,PMF)虽然是精益创业中最重要的概念之一,但也是最不明确的一个概念.2007年,马克?安德森在他的博客里创造了这个概念,并定义为:“在一个好的市场 ...

  8. nodejs+redis使用

    安装 linux安装及配置之前写过了http://www.cnblogs.com/zycbloger/p/6226682.html windows安装 下载地址:https://github.com/ ...

  9. SQL 中Count()的问题

    假如一张表中有如下的数据: 当使用select Count(*) from TableName表示获取表中数据记录的条数: 有时候可以通过select Count(列名) from TableName ...

  10. 使用CoreData [4]

    使用CoreData [4] 此片文章主要是分析如何对CoreData进行封装. 在开始之前,我们需要弄明白3个非常关键的类,以下翻译凑合着看看. NSManagedObjectContext An ...