怎么用C#判断文件的完整性

时间:2022-03-13 04:00:20
  我要用PDA中将Mobile数据库备份到本地电脑上,但是有时候备份的文件老是损坏,想问问大侠们,怎么才能判断备份的文件是否完整啊。 代码如下:
 bool IsOk=false;
            try
            {
                string strTemp = "";
                 rApi.Connect();
                if ((rApi.DeviceFileExists("\\Program Files\\xxx.sdf")))
                {
                    if (File.Exists(dirName + "\\xxx.sdf"))
                        File.Delete(dirName + "\\xxx.sdf");
                    //将文件从PDA中拷贝到本地电脑中
                    rApi.CopyFileFromDevice(dirName + "\\xxx.sdf", "\\ProgramFiles\\xxx.sdf", true);
                    //备份数据文件
                    strTemp = dirName + "\\" + System.DateTime.Now.ToString("yyyyMMddhhmm");
                    DirectoryInfo dirinfo = Directory.CreateDirectory(strTemp);
                    rApi.CopyFileFromDevice(strTemp + "\\xxx.sdf", "\\ProgramFiles\\xxx.sdf", true);
                    //备份结束
                    rApi.DeleteDeviceFile("\\Program Files\\xxx.sdf");
                    IsOk = true;
                }
                else
                {
                    backUpDBToPDA(dirName); //将文件备份回PDA
                    IsOk = false;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                IsOk=false;
            }
            return IsOk;

9 个解决方案

#1


那做个md5码验证吧

#2


1 判断文件的长度,如果文件长度固定或者可以算出的话
2 在文件最后加上一个标志字段,最后写入,如果没有,说明文件损坏

#3


请问楼上 caozhy 怎么加标志字段? 有代码吗 我是菜鸟。。

#4


怎么做md5 验证啊

#5


sdf格式啊。

那传输完数据文件再传输一个空文件。(比如和sdf文件同名,不同扩展名,如传输 123.sdf,那么就产生一个 123.empty 的空文件)

如果发现没有这个空文件,就是没有传完断开了。

#6


rApi.CopyFileFromDevice(dirName + "\\xxx.sdf", "\\ProgramFiles\\xxx.sdf", true);
rApi.CopyFileFromDevice(dirName + "\\xxx.sdf", "\\ProgramFiles\\xxx.txt", true);
然后判断本地是否有XXX.TXT?
如果这样写的话  那第一句没传完就断开了 ,第二句就不执行了?

#7


嗯。但是你没有必要传xxx.sdf了,再传一个空文件不更好么,因为你只要判断文件有没有。

#8


拷贝文件后,先进行一次简单的测试,目标文件是否存在,大小是否一致,

然后在整体校验对比一次。。。。

网上有很多MD5的对比方式,很多。

#9


用engine.Verify()判断

#1


那做个md5码验证吧

#2


1 判断文件的长度,如果文件长度固定或者可以算出的话
2 在文件最后加上一个标志字段,最后写入,如果没有,说明文件损坏

#3


请问楼上 caozhy 怎么加标志字段? 有代码吗 我是菜鸟。。

#4


怎么做md5 验证啊

#5


sdf格式啊。

那传输完数据文件再传输一个空文件。(比如和sdf文件同名,不同扩展名,如传输 123.sdf,那么就产生一个 123.empty 的空文件)

如果发现没有这个空文件,就是没有传完断开了。

#6


rApi.CopyFileFromDevice(dirName + "\\xxx.sdf", "\\ProgramFiles\\xxx.sdf", true);
rApi.CopyFileFromDevice(dirName + "\\xxx.sdf", "\\ProgramFiles\\xxx.txt", true);
然后判断本地是否有XXX.TXT?
如果这样写的话  那第一句没传完就断开了 ,第二句就不执行了?

#7


嗯。但是你没有必要传xxx.sdf了,再传一个空文件不更好么,因为你只要判断文件有没有。

#8


拷贝文件后,先进行一次简单的测试,目标文件是否存在,大小是否一致,

然后在整体校验对比一次。。。。

网上有很多MD5的对比方式,很多。

#9


用engine.Verify()判断