C# 在循环中如何检查目录中的所有文件大小? s=Environment.GetEnvironmentVariable(“UserProfile”)+“\\Pictures”; 字符串[]photofiles=Directory.GetFiles(t,“**”,SearchOption.AllDirectories); 对于(int i=0;i

C# 在循环中如何检查目录中的所有文件大小? s=Environment.GetEnvironmentVariable(“UserProfile”)+“\\Pictures”; 字符串[]photofiles=Directory.GetFiles(t,“**”,SearchOption.AllDirectories); 对于(int i=0;i,c#,winforms,C#,Winforms,这将把文件从一个目录复制到另一个目录。 我想一直检查FOR循环中的目标目录大小。 例如,如果文件小于50mb,则首先复制一个文件以检查文件大小 复制第二个文件后,循环中的下一个i插入检查目标目录中的两个文件的大小(如果两个文件的大小都小于50mb),然后继续。 以此类推,直到达到50mb,然后停止循环。您可以借助下面的代码: s = Environment.GetEnvironmentVariable("UserProfile") + "\\Pictures"; stri

这将把文件从一个目录复制到另一个目录。 我想一直检查FOR循环中的目标目录大小。 例如,如果文件小于50mb,则首先复制一个文件以检查文件大小

复制第二个文件后,循环中的下一个i插入检查目标目录中的两个文件的大小(如果两个文件的大小都小于50mb),然后继续。
以此类推,直到达到50mb,然后停止循环。

您可以借助下面的代码:

s = Environment.GetEnvironmentVariable("UserProfile") + "\\Pictures";
            string[] photosfiles = Directory.GetFiles(t, "*.*", SearchOption.AllDirectories);
            for (int i = 0; i < s.Length; i++)
            {

                File.Copy(photosfiles[i], tempphotos + "\\" + Path.GetFileName(photosfiles[i]), true);

            }

这两个答案都来自链接

您可以借助以下代码:

s = Environment.GetEnvironmentVariable("UserProfile") + "\\Pictures";
            string[] photosfiles = Directory.GetFiles(t, "*.*", SearchOption.AllDirectories);
            for (int i = 0; i < s.Length; i++)
            {

                File.Copy(photosfiles[i], tempphotos + "\\" + Path.GetFileName(photosfiles[i]), true);

            }

这两个答案都来自link

您可以在开始复制文件之前计算目录的大小,然后在复制时添加每个文件的大小,或者在每次复制文件后重新计算目录的大小。我认为后一种方法可能更准确,但效率也要低得多,这取决于您复制的文件的大小(如果文件非常小,您最终会多次计算它们)

要获取目录的大小,请使用:

static String BytesToString(long byteCount)
{
    string[] suf = { "B", "KB", "MB", "GB", "TB", "PB", "EB" }; //Longs run out around EB
    if (byteCount == 0)
        return "0" + suf[0];
    long bytes = Math.Abs(byteCount);
    int place = Convert.ToInt32(Math.Floor(Math.Log(bytes, 1024)));
    double num = Math.Round(bytes / Math.Pow(1024, place), 1);
    return (Math.Sign(byteCount) * num).ToString() + suf[place];
}
此处用作示例的函数:

因此,您的代码如下所示:

public static long DirSize(DirectoryInfo d) 
{    
    long Size = 0;    
    // Add file sizes.
    FileInfo[] fis = d.GetFiles();
    foreach (FileInfo fi in fis) 
    {      
        Size += fi.Length;    
    }
    // Add subdirectory sizes.
    DirectoryInfo[] dis = d.GetDirectories();
    foreach (DirectoryInfo di in dis) 
    {
        Size += DirSize(di);   
    }
    return(Size);  
}
for(int i=0;i如果((dirSize+fi.长度)您可以在开始跨多个文件复制之前计算目录的大小,然后在复制时添加每个文件的大小,或者在每次文件复制后重新计算目录的大小。我认为后一种方法可能更准确,但效率也要低得多,这取决于您复制的文件的大小(如果它们很小,你最终会数到很多次)

要获取目录的大小,请使用:

static String BytesToString(long byteCount)
{
    string[] suf = { "B", "KB", "MB", "GB", "TB", "PB", "EB" }; //Longs run out around EB
    if (byteCount == 0)
        return "0" + suf[0];
    long bytes = Math.Abs(byteCount);
    int place = Convert.ToInt32(Math.Floor(Math.Log(bytes, 1024)));
    double num = Math.Round(bytes / Math.Pow(1024, place), 1);
    return (Math.Sign(byteCount) * num).ToString() + suf[place];
}
此处用作示例的函数:

因此,您的代码如下所示:

public static long DirSize(DirectoryInfo d) 
{    
    long Size = 0;    
    // Add file sizes.
    FileInfo[] fis = d.GetFiles();
    foreach (FileInfo fi in fis) 
    {      
        Size += fi.Length;    
    }
    // Add subdirectory sizes.
    DirectoryInfo[] dis = d.GetDirectories();
    foreach (DirectoryInfo di in dis) 
    {
        Size += DirSize(di);   
    }
    return(Size);  
}
for(int i=0;i如果((dirSize+fi.length)这是有效的。现在,如果达到50mb,我如何检查大小?这是代码:for(int i=0;i