现在不用遍历FTP了,遍历本地目录就行了,我用以下代码想得到有结构的文件列表但是输出不对,请大家帮忙看看。 public ArrayList al = new ArrayList(); public int aaa = 0; public void GetAllDirList(string strBaseDir) {
DirectoryInfo di = new DirectoryInfo(strBaseDir); DirectoryInfo[] diA = di.GetDirectories(); if (aaa == 0) { FileInfo[] fis2 = di.GetFiles(); //有关目录下的文件 for (int i2 = 0; i2 < fis2.Length; i2++) {
al.Add(fis2[i2].FullName + "\t\t" + (float)(fis2[i2].Length / 1048576.00) + "MB"); //fis2[i2].FullName是根目录中文件的绝对地址,把它记录在ArrayList中 } } for (int i = 0; i < diA.Length; i++) { aaa++; string space = ""; for (int j = 0; j < aaa; j++) { space += "-"; } al.Add(space + diA[i].FullName + "\t<目录>" );
//diA[i].FullName是某个子目录的绝对地址,把它记录在ArrayList中 DirectoryInfo di1 = new DirectoryInfo(diA[i].FullName); DirectoryInfo[] diA1 = di1.GetDirectories(); FileInfo[] fis1 = di1.GetFiles(); //有关目录下的文件 for (int ii = 0; ii < fis1.Length; ii++) {
现在不用遍历FTP了,遍历本地目录就行了,我用以下代码想得到有结构的文件列表但是输出不对,请大家帮忙看看。 public ArrayList al = new ArrayList(); public int aaa = 0; public void GetAllDirList(string strBaseDir) {
DirectoryInfo di = new DirectoryInfo(strBaseDir); DirectoryInfo[] diA = di.GetDirectories(); if (aaa == 0) { FileInfo[] fis2 = di.GetFiles(); //有关目录下的文件 for (int i2 = 0; i2 < fis2.Length; i2++) {
al.Add(fis2[i2].FullName + "\t\t" + (float)(fis2[i2].Length / 1048576.00) + "MB"); //fis2[i2].FullName是根目录中文件的绝对地址,把它记录在ArrayList中 } } for (int i = 0; i < diA.Length; i++) { aaa++; string space = ""; for (int j = 0; j < aaa; j++) { space += "-"; } al.Add(space + diA[i].FullName + "\t<目录>" );
//diA[i].FullName是某个子目录的绝对地址,把它记录在ArrayList中 DirectoryInfo di1 = new DirectoryInfo(diA[i].FullName); DirectoryInfo[] diA1 = di1.GetDirectories(); FileInfo[] fis1 = di1.GetFiles(); //有关目录下的文件 for (int ii = 0; ii < fis1.Length; ii++) {
public int aaa = 0;
public void GetAllDirList(string strBaseDir)
{
DirectoryInfo di = new DirectoryInfo(strBaseDir);
DirectoryInfo[] diA = di.GetDirectories();
if (aaa == 0)
{
FileInfo[] fis2 = di.GetFiles(); //有关目录下的文件
for (int i2 = 0; i2 < fis2.Length; i2++)
{
al.Add(fis2[i2].FullName + "\t\t" + (float)(fis2[i2].Length / 1048576.00) + "MB");
//fis2[i2].FullName是根目录中文件的绝对地址,把它记录在ArrayList中
}
}
for (int i = 0; i < diA.Length; i++)
{
aaa++;
string space = "";
for (int j = 0; j < aaa; j++)
{
space += "-";
}
al.Add(space + diA[i].FullName + "\t<目录>" );
//diA[i].FullName是某个子目录的绝对地址,把它记录在ArrayList中
DirectoryInfo di1 = new DirectoryInfo(diA[i].FullName);
DirectoryInfo[] diA1 = di1.GetDirectories();
FileInfo[] fis1 = di1.GetFiles(); //有关目录下的文件
for (int ii = 0; ii < fis1.Length; ii++)
{
al.Add(space + fis1[ii].FullName);
//fis1[ii].FullName是某个子目录中文件的绝对地址,把它记录在ArrayList中
}
GetAllDirList(diA[i].FullName);
//递归
}
调用:
GetAllDirList(@"I:\Music");
foreach (string item in al)
{
TextBox1.Text = TextBox1.Text + item + "\n";
}
输出:I:\Music\Evanescence - My Immortal.mp3.td 4.074219MB
I:\Music\Evanescence - My Immortal.mp3.td.cfg 0.0007429123MB
I:\Music\i only wanted.mp3 4.93077MB
I:\Music\Mariah Carey - I Only Wanted.lrc 0.001274109MB
I:\Music\Mariah Carey - Through The Rain.lrc 0.001670837MB
I:\Music\through the rain.mp3 4.445235MB
I:\Music\春到湘江.mp3 5.793924MB
-I:\Music\笛子 <目录>1
-I:\Music\笛子\塞上风情.wma
-I:\Music\笛子\妆台秋思.mp3
-I:\Music\笛子\妆台秋思(箫_钢琴).wma
-I:\Music\笛子\山居秋暝.wma
-I:\Music\笛子\春到湘江.mp3
-I:\Music\笛子\枣园春色.wma
-I:\Music\笛子\欢乐的边疆.wma
-I:\Music\笛子\登幽州台歌.wma
-I:\Music\笛子\跑旱船.wma
-I:\Music\笛子\远韵.wma
-I:\Music\笛子\陕北好.wma
--I:\Music\笛子\新建文件夹 <目录>1
--I:\Music\笛子\新建文件夹\春到湘江.mp3
--I:\Music\笛子\新建文件夹\欢乐的边疆.wma
--I:\Music\笛子\新建文件夹\登幽州台歌.wma
---I:\Music\笛子\新建文件夹\adsfasdafa <目录>1
---I:\Music\笛子\新建文件夹\adsfasdafa\新建日志文档.jnt
----I:\Music\笛子\新建文件夹\adsfasdafa\新建文件夹 <目录>1
----I:\Music\笛子\新建文件夹\adsfasdafa\新建文件夹\新建 Microsoft Office Excel 工作表.xlsx
-----I:\Music\苏打绿 <目录>1
-----I:\Music\苏打绿\01.游乐.mp3
-----I:\Music\苏打绿\02.花茶.mp3
-----I:\Music\苏打绿\03.四季狂想.mp3
-----I:\Music\苏打绿\04.左边.mp3
-----I:\Music\苏打绿\05.无与伦比的美丽.mp3
-----I:\Music\苏打绿\06.白日出没的月球.mp3
-----I:\Music\苏打绿\07.这天.mp3
-----I:\Music\苏打绿\08.简单生活.mp3
-----I:\Music\苏打绿\09.城市.mp3
-----I:\Music\苏打绿\10.相信.mp3
-----I:\Music\苏打绿\苏打绿 - 四季狂想.lrc
-----I:\Music\苏打绿\苏打绿 - 游乐.lrc
-----I:\Music\苏打绿\苏打绿 - 相信.lrc
-----I:\Music\苏打绿\苏打绿 - 花茶.lrc
public int aaa = 0;
public void GetAllDirList(string strBaseDir)
{
DirectoryInfo di = new DirectoryInfo(strBaseDir);
DirectoryInfo[] diA = di.GetDirectories();
if (aaa == 0)
{
FileInfo[] fis2 = di.GetFiles(); //有关目录下的文件
for (int i2 = 0; i2 < fis2.Length; i2++)
{
al.Add(fis2[i2].FullName + "\t\t" + (float)(fis2[i2].Length / 1048576.00) + "MB");
//fis2[i2].FullName是根目录中文件的绝对地址,把它记录在ArrayList中
}
}
for (int i = 0; i < diA.Length; i++)
{
aaa++;
string space = "";
for (int j = 0; j < aaa; j++)
{
space += "-";
}
al.Add(space + diA[i].FullName + "\t<目录>" );
//diA[i].FullName是某个子目录的绝对地址,把它记录在ArrayList中
DirectoryInfo di1 = new DirectoryInfo(diA[i].FullName);
DirectoryInfo[] diA1 = di1.GetDirectories();
FileInfo[] fis1 = di1.GetFiles(); //有关目录下的文件
for (int ii = 0; ii < fis1.Length; ii++)
{
al.Add(space + fis1[ii].FullName);
//fis1[ii].FullName是某个子目录中文件的绝对地址,把它记录在ArrayList中
}
GetAllDirList(diA[i].FullName);
//递归
}
调用:
GetAllDirList(@"I:\Music");
foreach (string item in al)
{
TextBox1.Text = TextBox1.Text + item + "\n";
}
输出:I:\Music\Evanescence - My Immortal.mp3.td 4.074219MB
I:\Music\Evanescence - My Immortal.mp3.td.cfg 0.0007429123MB
I:\Music\i only wanted.mp3 4.93077MB
I:\Music\Mariah Carey - I Only Wanted.lrc 0.001274109MB
I:\Music\Mariah Carey - Through The Rain.lrc 0.001670837MB
I:\Music\through the rain.mp3 4.445235MB
I:\Music\春到湘江.mp3 5.793924MB
-I:\Music\笛子 <目录>1
-I:\Music\笛子\塞上风情.wma
-I:\Music\笛子\妆台秋思.mp3
-I:\Music\笛子\妆台秋思(箫_钢琴).wma
-I:\Music\笛子\山居秋暝.wma
-I:\Music\笛子\春到湘江.mp3
-I:\Music\笛子\枣园春色.wma
-I:\Music\笛子\欢乐的边疆.wma
-I:\Music\笛子\登幽州台歌.wma
-I:\Music\笛子\跑旱船.wma
-I:\Music\笛子\远韵.wma
-I:\Music\笛子\陕北好.wma
--I:\Music\笛子\新建文件夹 <目录>1
--I:\Music\笛子\新建文件夹\春到湘江.mp3
--I:\Music\笛子\新建文件夹\欢乐的边疆.wma
--I:\Music\笛子\新建文件夹\登幽州台歌.wma
---I:\Music\笛子\新建文件夹\adsfasdafa <目录>1
---I:\Music\笛子\新建文件夹\adsfasdafa\新建日志文档.jnt
----I:\Music\笛子\新建文件夹\adsfasdafa\新建文件夹 <目录>1
----I:\Music\笛子\新建文件夹\adsfasdafa\新建文件夹\新建 Microsoft Office Excel 工作表.xlsx
-----I:\Music\苏打绿 <目录>1
-----I:\Music\苏打绿\01.游乐.mp3
-----I:\Music\苏打绿\02.花茶.mp3
-----I:\Music\苏打绿\03.四季狂想.mp3
-----I:\Music\苏打绿\04.左边.mp3
-----I:\Music\苏打绿\05.无与伦比的美丽.mp3
-----I:\Music\苏打绿\06.白日出没的月球.mp3
-----I:\Music\苏打绿\07.这天.mp3
-----I:\Music\苏打绿\08.简单生活.mp3
-----I:\Music\苏打绿\09.城市.mp3
-----I:\Music\苏打绿\10.相信.mp3
-----I:\Music\苏打绿\苏打绿 - 四季狂想.lrc
-----I:\Music\苏打绿\苏打绿 - 游乐.lrc
-----I:\Music\苏打绿\苏打绿 - 相信.lrc
-----I:\Music\苏打绿\苏打绿 - 花茶.lrc
可以编写ftp的客户端程序,发送获取目录信息指令即可获得服务器目录及子目录信息。
public void GetCurDirInfo(String CurDirPath)
{
FileList = new List<FileOrDirInfo>();
String msg;
string tmp2 = DoCommand("PASV");
SetInf(tmp2);
IsCmdPasvSuccess = true;
if (tmp2.Substring(0,1)!="2")//Type set to I.
{
SetInf("服务器没有返回227,无法知道端口,也无法开始传输目录信息!");
IsCmdPasvSuccess = false;
return ;
}
string[] ips = Ftp.GetIP(tmp2);
TcpClient tcm;
try
{
SetInf("正在连接文件传输服务器!");
tcm = new TcpClient(ips[0], System.Convert.ToInt32(ips[1]));//连接传输服务器.
}
catch (ArgumentNullException ex1)
{
SetInf(ex1.Message);
return ;
}
catch (ArgumentOutOfRangeException ex2)
{
SetInf(ex2.Message);
return ;
}
catch (SocketException ex3)
{
SetInf(ex3.Message);
return ;
}
DoCmd("NOOP", "200");
string inf = DoCommand("LIST "+CurDirPath);
NetworkStream tmx = tcm.GetStream();//获得流
SetInf("正在接收目录信息....");
int i = 0;
int c = 0;
StringBuilder ReceDataBuilder=new StringBuilder();
msg = "";
do
{ byte[] dats = new byte[10240];
i = tmx.Read(dats, 0, dats.Length);
c += i;
// Thread.Sleep(100);
ReceDataBuilder.AppendFormat("{0}", Encoding.Default.GetString(dats, 0, i));
// Thread.Sleep(100);
}
while (i > 0);
msg = ReceDataBuilder.ToString();
tmx = null;
tcm.Close();
FileListStyle _directoryListStyle = Ftp.GuessFileListStyle(msg);
String[] RecordList = msg.Split('\n');
foreach(String rec in RecordList)
{
if (_directoryListStyle != FileListStyle.Unknown && !String.IsNullOrEmpty(rec))
{
FileOrDirInfo Info = new FileOrDirInfo();
switch(_directoryListStyle)
{
case FileListStyle.WindowsStyle:
Info = Ftp.ParseFileStructFromWindowsStyleRecord(rec);
break;
case FileListStyle.UnixStyle:
Info = Ftp.ParseFileStructFromUnixStyleRecord(rec);
break;
case FileListStyle.Unknown:
break;
default:
break;
}
FileList.Add(Info);
}
}
msg = DoCommand("");
if (msg.Substring(0, 1) == "2")
{
inf = "接收目录信息完成!";
SetInf(inf);
}
} /// <summary>
/// 判断文件列表的方式Window方式还是Unix方式
/// </summary>
/// <param name="recordList">文件信息列表</param>
private static FileListStyle GuessFileListStyle(String msg)
{
String[] RecordList = msg.Split('\n') ; foreach (string s in RecordList)
{
if (s.Length > 10
&& Regex.IsMatch(s.Substring(0, 10), "(-|d)(-|r)(-|w)(-|x)(-|r)(-|w)(-|x)(-|r)(-|w)(-|x)"))
{
return FileListStyle.UnixStyle;
}
else if (s.Length > 8
&& Regex.IsMatch(s.Substring(0, 8), "[0-9][0-9]-[0-9][0-9]-[0-9][0-9]"))
{
return FileListStyle.WindowsStyle;
}
}
return FileListStyle.Unknown;
}