string[] fileEntries = Directory.GetFiles(@"d:\", "*.avi");
public static string filetoupload;
int count = 0;
private void button1_Click(object sender, EventArgs e)
{
if (fileEntries.Length > 0)
{
filetoupload = fileEntries[count];
count += 1;
}
}
private void FilesSizes()
{
string[] sizes = { "B", "KB", "MB", "GB" };
double len = new FileInfo(filetoupload).Length;
int order = 0;
while (len >= 1024 && order + 1 < sizes.Length)
{
order++;
len = len / 1024;
}
string result = String.Format("{0:0.##} {1}", len, sizes[order]);
}
现在fileEntries包含所有avi文件。 但我希望它只包含使用FilesSizes方法不超过70MB的avi文件。
我试过这种方式但得到错误:
private void FilesSizes()
{
for (int i = 0; i < fileEntries.Length; i++)
{
string[] sizes = { "B", "KB", "MB", "GB" };
double len = new FileInfo(fileEntries[i]).Length;
int order = 0;
while (len >= 1024 && order + 1 < sizes.Length)
{
order++;
len = len / 1024;
}
string result = String.Format("{0:0.##} {1}", len, sizes[order]);
if (len > 70)
fileEntries[i].Remove(i);
}
}
首先,我不确定是否(len> 70)是检查文件大小是否大于70MB的正确方法。
第二个错误我在这一行:
fileEntries[i].Remove(i);
问题是例如当i = 14时: startIndex必须小于字符串的长度
我现在尝试也返回一个List
private List<string> FilesSizes()
{
List<string> filestoremove = null;
foreach(string item in fileEntries)
{
string[] sizes = { "B", "KB", "MB", "GB" };
double len = new FileInfo(item).Length;
int order = 0;
while (len >= 1024 && order + 1 < sizes.Length)
{
order++;
len = len / 1024;
}
string result = String.Format("{0:0.##} {1}", len, sizes[order]);
if (len > 70)
{
filestoremove = new List<string>(fileEntries);
filestoremove.Remove(item);
}
}
return filestoremove;
}
但出于某种原因,它只删除了List中的一个文件,并且有22个文件,然后超过100MB,所以我做错了。
答案 0 :(得分:0)
一种方法是修改update
方法,使其返回文件大小。然后在按钮单击中,您可以遍历FilesSizes
数组并查找每个条目的文件大小。如果文件大小合适,那么你可以用它做一些事情:添加到一个新数组(或者更好,fileEntries
)或附加到另一个字符串。
您可以使用Linq查询文件系统,使其更加优雅。这里有一个有趣的例子:https://msdn.microsoft.com/en-us/library/bb546154.aspx。
尝试完成后,如果您需要更多帮助,请发布您的代码。