一、遍历文件
1.遍历文件,得到文件名
/*遍历文件夹*/
public static string[] GetFilePath(string folderPath)
{
if (Directory.Exists(folderPath))
{
DirectoryInfo folder = new DirectoryInfo(folderPath);
FileInfo[] files = folder.GetFiles();
ArrayList list = new ArrayList();
foreach (var file in files)
{
Console.WriteLine(file.Name);
list.Add(file.Name);
}
string[] result = list.ToArray(typeof(string)) as string[];
return result;
}
else
{
MessageBox.Show("未找到路径");
return null;
}
}
2.调用遍历文件方法
string folderPath;//文件路径
// 调用遍历文件方法
folderPath = "E:/文件集";
string[] files = GetFilePath(folderPath);
二、分页展示
1.由于我是要根据展示的文件名称再进入下一级播放,所以用的是Button,以每页展示6个为例,布局如下,注意Button布局排列之前先铺一层Panel作为容器。
封装6个Button排列布局:
private void LayoutForm(string[] files)
{
// 这里Panel做清除是为了下一页展示不重复
if (panel1.Controls != null)
{
panel1.Controls.Clear();
}
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
Button btn = new Button();
if ((i + j + 2 * i) < files.Length)
{
btn.Text = files[i + j + 2 * i];
}
else
{
break;
}
btn.Click += new System.EventHandler(this.btn_Click);
btn.Size = new Size(410, 290);
btn.Location = new Point(450 * j, 327 * i);
btn.Image = global::HBDTWindowsFormsApp.Properties.Resources.bg1;
btn.ForeColor = Color.Transparent;
btn.Font = new Font("Arial", 30, FontStyle.Bold);
btn.BackColor = Color.Transparent;
btn.FlatAppearance.MouseDownBackColor = Color.Transparent;
btn.FlatAppearance.MouseOverBackColor = Color.Transparent;
btn.FlatAppearance.BorderSize = 0;
btn.FlatAppearance.BorderColor = Color.FromArgb(0, 0, 0, 0);
btn.FlatStyle = FlatStyle.Flat;
panel1.Controls.Add(btn);
}
}
}
调用布局:
int pageCurrent; //当前页
pageCurrent = 1;
LayoutForm(files);
// 显示页码
label1.Text = pageCurrent.ToString();
2.下一页:如果文件的总数量>6,那就要分多页展示。
思路:根据当前页码,在文件名数组里面按下标取值,例如,第1页取下标为0-5的数组数据,第2页取下标为6-11的数组数据……以此类推。
int pageSize = 6; //每页大小
获取总页数:
public int getPageCount(Array array)
{
int pages = array.Length % pageSize == 0 ? (array.Length / 6) : ((array.Length / 6) + 1);
return pages;
}
下一页:
private void button5_Click(object sender, EventArgs e)
{
// 下一页
string[] allFile = GetFilePath(folderPath);
int length1 = allFile.Length;
var pages = getPageCount(allFile);
ArrayList list = new ArrayList();
if (pageCurrent >= pages)
{
MessageBox.Show("已是最后一页");
}
else
{
pageCurrent++;
label1.Text = pageCurrent.ToString();// 显示页码
int start = (pageCurrent - 1) * 6;
int end = pageCurrent * 6 ;
if (end > length1)
{
end = length1;
}
for (int i = start; i < end; i++)
{
list.Add(allFile[i]);
Console.WriteLine("下一页数据:");
Console.WriteLine(allFile[i]);
}
string[] arr = list.ToArray(typeof(string)) as string[];
Console.WriteLine(arr);
LayoutForm(arr);
}
}
3.返回上一页:思路同上一页,只不过是pageCurrent--。
private void button4_Click(object sender, EventArgs e)
{
// 返回上一页
if (pageCurrent == 1)
{
MessageBox.Show("已经在第一页");
}
else {
pageCurrent--;
label1.Text = pageCurrent.ToString();
string[] allFile = GetFilePath(folderPath);
int length1 = allFile.Length;
int start = (pageCurrent - 1) * 6;
int end = pageCurrent * 6 ;
ArrayList list = new ArrayList();
if (end > length1)
{
end = length1;
}
for (int i = start; i< end; i++)
{
list.Add(allFile[i]);
Console.WriteLine("返回上一页数据:");
Console.WriteLine(allFile[i]);
}
string[] arr = list.ToArray(typeof(string)) as string[];
LayoutForm(arr);
}
}
4.如果想根据文件名点击进入查看文件界面,拼接文件路径进入下一页就可以了。
// 拼接文件路径
Button button = sender as Button;
string fullPath = folderPath + "/" + button.Text;
// 获取文件路径的扩展名
string extension = Path.GetExtension(fullPath);
// 进入下一页查看,并把文件路径传过去
ShowForm showForm = new ShowForm(fullPath);
ShowForm .Show();