遍历文件夹结构存储到数据库

using System;
using System.Web;
using System.Linq;
using System.Configuration;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.IO;
using System.Data.Common;
using System.Data;
using System.Security.Cryptography;
using System.Text;//有一些没用到

方法一:

case "oldfiles"://老方法循环遍历文件夹,缺点:文件夹层级数固定。
{
string sql = "";
var Pid = "0";
var Pid0 = "";
var Pid1 = "";
var Pid2 = "";
var Pid3 = "";
var Pid4 = "";
sql = "delete from table_files";
pghelper.ExecuteNonQuery(CommandType.Text, sql);
string fileNameDir = System.Web.HttpContext.Current.Server.MapPath("~");//项目路径
string photo_path = fileNameDir + "resource/目标文件夹/";//文件路径
DirectoryInfo theFolder = new DirectoryInfo(photo_path);//初始化对象,创建路径
int cp = photo_path.IndexOf("resource");
photo_path = photo_path.Substring(cp);
string filenameP = "目标文件夹";
string filepathP = photo_path;
sql = "insert into table_files(pid,name,filepath) values('" + Pid + "', '" + filenameP + "','" + filepathP + "') RETURNING id;";
Pid = pghelper.InsertReturnId(sql).ToString();
FileInfo[] thefileInfo = theFolder.GetFiles("*.*", SearchOption.TopDirectoryOnly);//获取路径photo_path的文件(.后缀文件)
foreach (FileInfo NextFile in thefileInfo) //遍历根节点下文件
{
string filename = NextFile.Name;
string filepath = NextFile.FullName.Substring(cp);
sql = "insert into table_files(pid,name,filepath) values('" + Pid + "', '" + filename + "','" + filepath + "') RETURNING id;";
pghelper.InsertReturnId(sql);

}

DirectoryInfo[] dirInfo0 = theFolder.GetDirectories();//遍历根节点文件夹
//判断第一层是否存在文件夹
if (dirInfo0.Length > 0)
{
foreach (DirectoryInfo NextFolder0 in dirInfo0)
{
string filename0 = NextFolder0.Name;
string filepath0 = NextFolder0.FullName.Substring(cp);
sql = "insert into table_files(pid,name,filepath) values('" + Pid + "', '" + filename0 + "','" + filepath0 + "') RETURNING id;";
Pid0 = pghelper.InsertReturnId(sql).ToString();

FileInfo[] fileInfo0 = NextFolder0.GetFiles("*.*", SearchOption.TopDirectoryOnly);//获取目录dirInfo0的文件(.后缀文件)
foreach (FileInfo NextFile0 in fileInfo0) //遍历第一层文件夹下的文件
{
string filePname00 = NextFile0.Name;
string filePpath00 = NextFile0.FullName.Substring(cp);
sql = "insert into table_files(pid,name,filepath) values('" + Pid0 + "', '" + filePname00 + "','" + filePpath00 + "') RETURNING id;";
pghelper.InsertReturnId(sql); ;
}

DirectoryInfo[] dirInfo1 = NextFolder0.GetDirectories();//遍历第一层文件夹
//判断第二层是否存在文件夹
if (dirInfo1.Length > 0)
{
foreach (DirectoryInfo NextFolder1 in dirInfo1)
{

string filename1 = NextFolder1.Name;
string filepath1 = NextFolder1.FullName.Substring(cp);
sql = "insert into table_files(pid,name,filepath) values('" + Pid0 + "', '" + filename1 + "','" + filepath1 + "') RETURNING id;";
Pid1 = pghelper.InsertReturnId(sql).ToString();
FileInfo[] fileInfo1 = NextFolder1.GetFiles("*.*", SearchOption.TopDirectoryOnly);//获取目录dirInfo1的文件(.后缀文件)
foreach (FileInfo NextFile1 in fileInfo1) //遍历第二层文件夹下的文件
{


string filename11 = NextFile1.Name;
string filepath11 = NextFile1.FullName.Substring(cp);
sql = "insert into table_files(pid,name,filepath) values('" + Pid1 + "', '" + filename11 + "','" + filepath11 + "') RETURNING id;";
pghelper.InsertReturnId(sql);
}
//NextFile.Name;
DirectoryInfo[] dirInfo2 = NextFolder1.GetDirectories();//遍历第二层文件夹
//判断第三层是否存在文件夹
if (dirInfo2.Length > 0)
{
foreach (DirectoryInfo NextFolder2 in dirInfo2)
{
string filename2 = NextFolder2.Name;
string filepath2 = NextFolder2.FullName.Substring(cp);
sql = "insert into table_files(pid,name,filepath) values('" + Pid1 + "', '" + filename2 + "','" + filepath2 + "') RETURNING id;";
Pid2 = pghelper.InsertReturnId(sql).ToString();
FileInfo[] fileInfo2 = NextFolder2.GetFiles("*.*", SearchOption.TopDirectoryOnly);//获取目录dirInfo2的文件(.后缀文件)
foreach (FileInfo NextFile2 in fileInfo2) //遍历第三层文件夹下的文件
{
string filename22 = NextFile2.Name;
string filepath22 = NextFile2.FullName.Substring(cp);
sql = "insert into table_files(pid,name,filepath) values('" + Pid2 + "', '" + filename22 + "','" + filepath22 + "') RETURNING id;";
pghelper.InsertReturnId(sql);
}
//NextFile.Name;
DirectoryInfo[] dirInfo3 = NextFolder2.GetDirectories();//遍历第三层文件夹
//判断第四层是否存在文件夹
if (dirInfo3.Length > 0)
{
foreach (DirectoryInfo NextFolder3 in dirInfo3)
{
string filename3 = NextFolder3.Name;
string filepath3 = NextFolder3.FullName.Substring(cp);
sql = "insert into table_files(pid,name,filepath) values('" + Pid2 + "', '" + filename3 + "','" + filepath3 + "') RETURNING id;";
Pid3 = pghelper.InsertReturnId(sql).ToString();
FileInfo[] fileInfo3 = NextFolder3.GetFiles("*.*", SearchOption.TopDirectoryOnly);//获取目录dirInfo3的文件(.后缀文件)
foreach (FileInfo NextFile3 in fileInfo3) //遍历第四层文件夹下的文件
{
string filename33 = NextFile3.Name;
string filepath33 = NextFile3.FullName.Substring(cp);
sql = "insert into table_files(pid,name,filepath) values('" + Pid3 + "', '" + filename33 + "','" + filepath33 + "') RETURNING id;";
pghelper.InsertReturnId(sql);
}
//NextFile.Name;
DirectoryInfo[] dirInfo4 = NextFolder3.GetDirectories();//遍历第四层文件夹
//判断第五层是否存在文件夹
if (dirInfo4.Length > 0)
{
foreach (DirectoryInfo NextFolder4 in dirInfo3)
{
string filename4 = NextFolder4.Name;
string filepath4 = NextFolder4.FullName.Substring(cp);
sql = "insert into table_files(pid,name,filepath) values('" + Pid3 + "', '" + filename4 + "','" + filepath4 + "') RETURNING id;";
Pid4 = pghelper.InsertReturnId(sql).ToString();
FileInfo[] fileInfo4 = NextFolder3.GetFiles("*.*", SearchOption.TopDirectoryOnly);//获取目录dirInfo4的文件(.后缀文件)
foreach (FileInfo NextFile4 in fileInfo4) //遍历第五层文件夹下的文件
{
string filename44 = NextFile4.Name;
string filepath44 = NextFile4.FullName.Substring(cp);
sql = "insert into table_files(pid,name,filepath) values('" + Pid4 + "', '" + filename44 + "','" + filepath44 + "') RETURNING id;";
pghelper.InsertReturnId(sql);
}
//NextFile.Name;
DirectoryInfo[] dirInfo5 = NextFolder3.GetDirectories();//遍历第五层文件夹
//判断第六层是否存在文件夹
}
}
}
}
}
}
}
}
}
}


}
break;

方法二:

case "files"://新方法循环遍历文件夹,在此方法中用到递归函数,文件夹层级数无限制
{
string sql = "";
var Pid = "0";
sql = "delete from table_files";
pghelper.ExecuteNonQuery(CommandType.Text, sql);
string fileNameDir = System.Web.HttpContext.Current.Server.MapPath("~");//项目路径
string photo_path = fileNameDir + "resource/目标文件夹/";//文件路径
DirectoryInfo theFolder = new DirectoryInfo(photo_path);//初始化对象,创建路径
int cp = photo_path.IndexOf("resource");
photo_path = photo_path.Substring(cp);
string filenameP = "目标文件夹";
string filepathP = photo_path;
sql = "insert into table_files(pid,name,filepath) values('" + Pid + "', '" + filenameP + "','" + filepathP + "') RETURNING id;";
Pid = pghelper.InsertReturnId(sql).ToString();
FileInfo[] thefileInfo = theFolder.GetFiles("*.*", SearchOption.TopDirectoryOnly);//获取路径photo_path的文件(.后缀文件)
foreach (FileInfo NextFile in thefileInfo) //遍历根节点下文件
{
string filename = NextFile.Name;
string filepath = NextFile.FullName.Substring(cp);
sql = "insert into table_files(pid,name,filepath) values('" + Pid + "', '" + filename + "','" + filepath + "') RETURNING id;";
pghelper.InsertReturnId(sql);

}
DirectoryInfo[] dirInfo0 = theFolder.GetDirectories();//遍历根节点文件夹
if (dirInfo0.Length > 0)
{
savefiles(dirInfo0, Pid, cp);
}

break;

//遍历文件夹以及文件存入数据库递归方法
public void savefiles(DirectoryInfo[] theFolder, string Pid, int cp)
{
string conn = ConfigurationManager.ConnectionStrings["PgDBConnection"].ConnectionString;
PostgreHelper pghelper = new PostgreHelper(conn);
string sql = "";
string _Pid = "";
foreach (DirectoryInfo NextFolder0 in theFolder)
{
string filename0 = NextFolder0.Name;
string filepath0 = NextFolder0.FullName.Substring(cp);
sql = "insert into table_files(pid,name,filepath) values('" + Pid + "', '" + filename0 + "','" + filepath0 + "') RETURNING id;";
_Pid = pghelper.InsertReturnId(sql).ToString();

FileInfo[] fileInfo0 = NextFolder0.GetFiles("*.*", SearchOption.TopDirectoryOnly);//获取目录dirInfo0的文件(.后缀文件)
foreach (FileInfo NextFile0 in fileInfo0) //遍历文件夹下的文件
{
string filePname00 = NextFile0.Name;
string filePpath00 = NextFile0.FullName.Substring(cp);
sql = "insert into table_files(pid,name,filepath) values('" + _Pid + "', '" + filePname00 + "','" + filePpath00 + "') RETURNING id;";
pghelper.InsertReturnId(sql); ;
}

DirectoryInfo[] dirInfo1 = NextFolder0.GetDirectories();//遍历文件夹
if (dirInfo1.Length > 0)
{
savefiles(dirInfo1, _Pid, cp);//执行递归函数
}
}
}

猜你喜欢

转载自www.cnblogs.com/nn1314/p/10894638.html
今日推荐