Как начать процесс A после завершения процесса B в c #? - PullRequest
0 голосов
/ 22 ноября 2018

Я написал службу Windows для перемещения файла из одного местоположения в другое и

затем прочитал файл в новом месте и записал данные в базу данных.

ВВ середине выполнения появляется сообщение об ошибке:

IOException: процесс не может получить доступ к файлу «путь к файлу», поскольку он используется другим процессом.

Myкод:

Класс перемещения файла

  public void mysql()
        {
            string fileName = "Bargstedt.csv";
            string sourcePath = @"\\192.168.1.2\Data\Company Files\";

            string targetPath = @"C:\Users\source";


            string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
            string destFile = System.IO.Path.Combine(targetPath, fileName);


            if (!System.IO.Directory.Exists(targetPath))
            {
                System.IO.Directory.CreateDirectory(targetPath);
            }
              System.IO.File.Copy(sourceFile, destFile, true);

            if (System.IO.Directory.Exists(sourcePath))
            {

                string[] files = System.IO.Directory.GetFiles(sourcePath);

                    fileName = System.IO.Path.GetFileName(fileName);
                    destFile = System.IO.Path.Combine(targetPath, fileName);
                    FileInfo info = new FileInfo(destFile);
                    bool exists = info.Exists;
                    if (exists == true)
                    {
                        try
                      {
                           int delay = 400;

                       File.Delete(@"C:\Users\Isuruh\source\Bargstedt.csv");
                            Thread.Sleep(delay); 
                         System.IO.File.Copy(sourceFile, destFile, true);
                        Debug.WriteLine("file moved");

                      }
                        catch (IOException ex) { }


                    }

                 }
            else
            {
                Console.WriteLine("Source path does not exist!");
            }
            Console.WriteLine("Press any key to exit.");
            }

Вставить класс

public void Insert()
        {
                if (this.OpenConnection() == true)
                {
                      using(var reader = new StreamReader(@"C:\Users\source\Bargstedt.csv"))
                      //using (var stream = File.Open(path, FileMode.Open, FileAccess.Write, FileShare.ReadWrite))
                    {
                        List<string> listA = new List<string>();

                        while (!reader.EndOfStream)
                        {
                            var line = reader.ReadLine();
                            var values = line.Split(',');
                            string querynew = "INSERT INTO new_jobs"
                                      + "(board_code,status,code,no1,no2,thickness,dimension,material,root,variable,number,stable,constant)" 
                                      + "VALUES (?jobNo, ?strClientName, ?strClientReference, ?strJobCategory, ?datCommisioned, ?datPromisedDelivery, ?division, ?date_assigned, ?root, ?variable, ?number, ?stable, ?constant)";

Я не упомянул весь кодза услугу, поскольку она слишком длинная.

Как указано в Solution 01 Я пытался использовать

using (var stream = File.Open(path, FileMode.Open, FileAccess.Write, FileShare.Read))

строку вместо

 using(var reader = new StreamReader(@"C:\Users\source\Bargstedt.csv"))

Но это вызывает ошибки в приведенных ниже ключевых словах, которые я использовал.

Я не уверен, возможно ли использовать открытый файл вместо класса считывателя?

По сути, что мне нужно сделатьтакое запуск процесса вставки после завершения процесса перемещения файла.

Есть предложения о том, как это сделать?

PS: Возможно, это дублирующий вопрос вопроса, который я упомянул выше.Я изо всех сил старался сделать этот вопрос уникальным.Цените, если не помечены как дубликаты.Спасибо!

...