Как ждать, пока операция не закончится?

Две опции:

  1. Добавьте параметр запроса mySaveFiles.json? t = timestamp в конец URL.
  2. Вытяните файл с помощью объекта XmlHttpRequest ( вам все равно может понадобиться добавить временную метку в зависимости от сервера).
1
задан double-beep 24 February 2019 в 20:27
поделиться

3 ответа

Вы можете проверить, что файл data.json записывается в свою выходную папку (код из этого ответа ):

private bool IsFileLocked(FileInfo file) 
{ 
   FileStream stream = null; 
   try 
  { 
    stream = file.Open(FileMode.Open,    FileAccess.ReadWrite, FileShare.None); 
  } 
  catch (IOException)
  { 
//the file is unavailable because it is: 
//still being written to 
//or being processed by another thread 
//or does not exist (has already been processed) 
    return true; 
  }
  finally 
  { 
    if (stream != null) stream.Close(); 
  } 
//file is not locked return 
return false; 
}
0
ответ дан Stemado 24 February 2019 в 20:27
поделиться

Вам не нужно проходить через cmd.exe. Сам интерпретатор Python является исполняемым; другими словами, он может быть запущен и выполнен напрямую. Аргументы для интерпретатора Python (например, путь + имя сценария, который должен быть выполнен) и требуемый рабочий каталог могут быть установлены через соответствующие свойства Process.StartInfo :

Process process = new Process();
process.StartInfo.FileName = "python.exe";
process.StartInfo.Arguments = "Python_Code.py";
process.StartInfo.WorkingDirectory = @"F:\Path";
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.Start();

Сейчас вам нужно только дождаться завершения интерпретатора Python (что означает, что он завершил выполнение скрипта python)

process.WaitForExit();

, и после завершения процесса Python просто проверьте, существует ли файл json / написано:

if (System.IO.File.Exists(pathToJsonFile))
{
    ... do stuff with json file ...
}
else
{
    ... json file does not exist, something went wrong...
}

Примечание: я сохранил здесь process.StartInfo.RedirectStandardOutput = true; в своем примере кода, так как я не знаю, что ваша программа действительно сделает. Однако, если ваша программа не хочет обрабатывать вывод сценария, который обычно появляется в окне консоли, установка RedirectStandardOutput в в значение true не требуется.

0
ответ дан elgonzo 24 February 2019 в 20:27
поделиться

Вы должны взглянуть на класс FileSystemWatcher. Документация здесь .

Тогда вы можете сделать что-то вроде этого:

using (FileSystemWatcher watcher = new FileSystemWatcher())
{
    watcher.Path = YourDirectory;
    // Watch for changes in LastWrite time
    watcher.NotifyFilter = NotifyFilters.LastWrite;

    // Watch for the wanted file
    watcher.Filter = "data.json";

    // Add event handlers.
    watcher.Created += WhateverYouWantToDo;
}
0
ответ дан SBFrancies 24 February 2019 в 20:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: