为了账号安全,请及时绑定邮箱和手机立即绑定

文件未正确复制到新位置

文件未正确复制到新位置

C#
开满天机 2022-01-15 16:49:37
我已经编写了 ac# 代码来将 csv 文件复制到新位置。如果该文件已存在于目标位置,则应删除该文件并将新文件粘贴回去。由于 csv 文件每 5 分钟更新一次,因此该过程应该重复并在后台运行。当前的问题是即使文件在目标路径中被删除,新文件也不会被写回。我的代码:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.IO;using System.Linq;using System.ServiceProcess;using System.Text;using System.Threading.Tasks;namespace filemove{    public partial class Service1 : ServiceBase    {        public Service1()        {            InitializeComponent();        }        protected override void OnStart(string[] args)        {                        }        public void Start()        {                            mysql();        }        static void mysql()        {            string fileName = "data.csv";            string sourcePath = @"\\192.168.16.12\Users";            string targetPath = @"C:\Users\Admin\source";            // Use Path class to manipulate file and directory paths.            string sourceFile = System.IO.Path.Combine(sourcePath, fileName);            string destFile = System.IO.Path.Combine(targetPath, fileName);            // To copy a folder's contents to a new location:            // Create a new target folder, if necessary.            if (!System.IO.Directory.Exists(targetPath))            {                System.IO.Directory.CreateDirectory(targetPath);            }            // To copy a file to another location and             // overwrite the destination file if it already exists.            System.IO.File.Copy(sourceFile, destFile, true);谁能弄清楚错误是什么?
查看完整描述

3 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

如果文件不存在,File.Delete实际上不会引发任何异常。因此,我将完全删除存在的检查。


try {

int delay = 400;


File.Delete(@"C:\Users\Admin\source\Bargstedt.csv");

Thread.Sleep(delay); // to prevent delete and copy happening at the 

// same time.


System.IO.File.Copy(s, destFile, true);                          


}catch (IOException ex) {}

您还可以查看此帖子:


C# 中的 FileStream 和 FileSystemWatcher,奇怪的问题“进程无法访问文件” 和用户 EventHorizon 的答案检查文件是否已关闭。


还建议检查目录是否有权限 (FileIOPermissionAccess.Write)


查看完整回答
反对 回复 2022-01-15
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

我想你的意思是即使有文件也要写文件。


您正在使用:


bool exists = info.Exists;

if (exists == true)

{

    File.Delete(@"C:\Users\Admin\source\Bargstedt.csv");

}

else

    System.IO.File.Copy(s, destFile, true); 

}

删除其他:


bool exists = info.Exists;

if (exists == true)

{

    File.Delete(@"C:\Users\Admin\source\Bargstedt.csv");

System.IO.File.Copy(s, destFile, true);


查看完整回答
反对 回复 2022-01-15
?
LEATH

TA贡献1936条经验 获得超6个赞

当文件存在于目标路径中并具有该现有文件的备份计划时,使用它来复制文件。


// To copy a file to another location and 

        // overwrite the destination file if it already exists.

        if (!File.Exists(destFile))

        {

            System.IO.File.Copy(sourceFile, destFile, true);

        }

        else

        {

            System.IO.File.Move(destFile, existingFilePath); //if file is existing and then move it to specific folder

            try

            {

                System.IO.File.Copy(sourceFile, destFile, true);

            }

            catch (Exception)

            {

                System.IO.File.Move(existingFilePath, destFile); //If anythig went wrong, old file is relocated correctly

            }

            System.IO.File.Delete(existingFilePath); // Delete old file, all is ok now.

        }


查看完整回答
反对 回复 2022-01-15
  • 3 回答
  • 0 关注
  • 200 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信