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从完整路径中取文件名,其中最 ...
随机推荐
- js-权威指南学习笔记13
第十三章 Web浏览器中的JavaScript 1.在客户端JS中,window对象也是全局对象. 2.window对象中其中一个最重要的属性是document,它引用Document对象. 3.JS ...
- PHP自定义函数&数组
<?php//生成随机数 和 时间函数//echo rand();//echo "<br>";//echo rand(0,10);//echo time();// ...
- Latex 数学公式使用入门
Latex 数学公式使用示例 Latex 数学公式命令中,数学符号都使用反斜杠(backslash, '\')转义英文缩略词 , 一些简单的数学符号命令: 其使用大括号(curly braces, ' ...
- 使用ServiceBroker自动激活模拟"秒杀"场景
1.简介 SQL Server Service Broker 是SQL server 里面比较独特的一个功能.它可帮助开发人员构建异步的松散耦合应用程序 ServiceBroker入门文章:http: ...
- C# 调用WebService服务
方 法 一 : 选择项目,右键添加服务引用,输入服务地址,如图: 点击确定跳转到如下界面: 调用 接口: ServiceReference1.ImportDataServiceClient sr = ...
- 用jQuery Validate+layer插件实现好看的表单提交效果
作为初学者,以前做表单验证都是自己写的,目的是让自己更好的了解代码,加深自己对javascript的理解,但是其实在很久都知道有一个很好用的表单验证插件:jQuery Validate.js,一直都没 ...
- MySql EF6 DBFirst 向导无法生成 edmx 解决方法(同:您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库提供程序)
使用 MySql EF6 DBfirst 生成模型时经常会遇到EF6模式无法选择的情况究其原因, 还是因为没有正确的使用 Connector/Net. 下面说一下使用方法. 使用 MySql DBFi ...
- 转:oracle 事务
原文地址:http://blog.csdn.net/junmail/article/details/5556561 关于Oracle事务的总结 1.什么是事务,事务的特性是什么? 事务的任务便是使数据 ...
- Flask的错误日志处理和|ORM操作
flask有个很人性化的处理就是 你的错误的输出是可以通过错误日志来自定义 ,让你输入的错误不再是“大黄页”, 通过 errorhandler()来装饰函数之后你的所有的输入错误的函数你都会进入这个 ...
- 写markdown用于Github上readme.md文件
Markdown 文档地址 http://pan.baidu.com/s/1o6nu9To Markdown还有一系列衍生版本,用于扩展Markdown的功能(如表格.脚注.内嵌HTML等等),这些功 ...