文件未正确复制到新位置

我已经编写了 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);


谁能弄清楚错误是什么?


开满天机
浏览 201回答 3
3回答

紫衣仙女

如果文件不存在,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)

梦里花落0921

我想你的意思是即使有文件也要写文件。您正在使用: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);

LEATH

当文件存在于目标路径中并具有该现有文件的备份计划时,使用它来复制文件。// 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.        }
打开App,查看更多内容
随时随地看视频慕课网APP