Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 匹配文件的名称和大小_C#_.net_Wpf - Fatal编程技术网

C# 匹配文件的名称和大小

C# 匹配文件的名称和大小,c#,.net,wpf,C#,.net,Wpf,我在集成两段代码时遇到了一些问题。第一个检查文件的大小,下一个检查通过SQL数据库循环,并查找文件的匹配名称。我主要是想检查它是否是一个新文件,或者自从上次我记录了它的一些数据后,该文件是否发生了更改 这将获取目录中每个文件的大小 // Make a reference to a directory. DirectoryInfo di = new DirectoryInfo("C:\\Users"); // Get a reference to each fil

我在集成两段代码时遇到了一些问题。第一个检查文件的大小,下一个检查通过SQL数据库循环,并查找文件的匹配名称。我主要是想检查它是否是一个新文件,或者自从上次我记录了它的一些数据后,该文件是否发生了更改

这将获取目录中每个文件的大小

 // Make a reference to a directory.
        DirectoryInfo di = new DirectoryInfo("C:\\Users");
        // Get a reference to each file in that directory.
        FileInfo[] fiArr = di.GetFiles();
        // Display the names and sizes of the files.
        MessageBox.Show("The directory {0} contains the following files:", di.Name);
        foreach (FileInfo f in fiArr)
            MessageBox.Show("The size of" + f.Name + " is " + f.Length + " bytes.");
该代码循环直到找到马赫数,或者直到所有条目都被查找完毕

  try
            {
                // LINQ query for all files containing the word '.txt'.
                var files = from file in
                                Directory.EnumerateFiles("C:\\Users")
                            where file.ToLower().Contains(".txt")
                            select file;

            foreach (var file in files)
            {
                //Get path to HH file
                filename = System.IO.Path.GetFileName(file);

                tempString = "";

                //Keep looking trough database utill database empty or HH found
                while (inc != numberOfSessions && (filename != tempString))
                { 

                    sessionRow = sessions.Tables["Sessions"].Rows[inc];
                    tempString = sessionRow.ItemArray.GetValue(1).ToString();

                    inc++;
                }
假设ItemAttay.GetValue(2)返回文件的保存大小。如果发生以下情况,如何最有效地保持while循环

公司numberOfSessions&&(filename!=tempString)&&(sessionRow.ItemArray.GetValue(2)=f.length)

谢谢你看

使用系统;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;



    class Program
    {
        static void Main(string[] args)
        {
            var files1 = new List<string>(Directory.GetFiles(args[0],
                "*.txt",
                SearchOption.AllDirectories));


            List<FileData> ListFiles = new List<FileData>();

            for (int i = 0; i < files1.Count; i++)
            { 


            FileInfo file = new FileInfo(files1[i]);
            FileData _tmpfile = new FileData(file.Name.ToString(), file.Length, 
                File.GetLastWriteTime(files1[1]).ToString("yyyy-MM-dd H:mm:ss"),
                File.GetLastAccessTime(files1[1]).ToString("yyyy-MM-dd H:mm:ss"));
            ListFiles.Add(_tmpfile);
            }

            DataSet sessions = new DataSet();
            DataTable dt = sessions.Tables["Sessions"];
            for (int i = 0; i < ListFiles.Count; i++)
            {
                //compares every file in folder to database
                FileData _tmp = ListFiles[i];
                for (int j = 0; j < dt.Rows.Count; j++)
                {
                    if (_tmp.GSFileName == dt.Rows[i][0].ToString())
                    { 
                        //put some code here
                        break; 
                    }

                    if (_tmp.GSSize == long.Parse(dt.Rows[i][1].ToString()))
                    {
                        //put some code here
                        break;
                    }

                }


            }



        }
    }
    public class FileData
    {
        string FileName = "";

        public string GSFileName
        {
            get { return FileName; }
            set { FileName = value; }
        }
        long Size = 0;

        public long GSSize
        {
            get { return Size; }
            set { Size = value; }
        }
        string DateOfModification = "";

        public string GSDateOfModification
        {
            get { return DateOfModification; }
            set { DateOfModification = value; }
        }
        string DateOfLastAccess = "";

        public string GSDateOfLastAccess
        {
            get { return DateOfLastAccess; }
            set { DateOfLastAccess = value; }
        }

        public FileData(string fn, long si, string dateofmod, string dateofacc)
        {
            FileName = fn;
            Size = si;
            DateOfModification = dateofmod;
            DateOfLastAccess = dateofacc;

        }

    }
使用System.Collections.Generic; 使用System.Linq; 使用系统文本; 使用System.IO; 使用系统数据; 班级计划 { 静态void Main(字符串[]参数) { var files1=新列表(Directory.GetFiles)(args[0], “*.txt”, SearchOption.AllDirectories); List ListFiles=新列表(); for(int i=0;i
如果文件内容发生变化,但大小保持不变,您是否在意?如果是这样,“检查文件大小是否已更改”标准将不起作用。也许可以改为计算一个散列?我只是不知道它是一个新文件还是附加了什么东西。它永远不会(我想永远不会)变小。如何计算散列?内置.NET散列函数的基类是。有一些非常古老的文档描述了在上计算文件哈希。您可以使用此代码创建从文件创建的哈希标记吗?在我看来,它似乎只比较字符串。我尝试了这段代码,并使用了不同目录中两个相同文件的路径,它说它们是不同的。我是否应该将文件的全部内容加载到sSourceData中,然后创建哈希标记?谢谢你帮了我的忙!要散列文件的内容,我建议。如果您将一个
FileStream
(可能是由创建的)传递给此方法,则可以散列文件的内容,而不是名称。太棒了!非常感谢,这正是我想要的!