В ожидании метода, чтобы закончить использование C #? - PullRequest
1 голос
/ 22 февраля 2011

У меня есть метод, который записывает файл на локальный диск.Другой метод берет этот файл и загружает его на сервер sftp.Проблема в том, что файл на сервере sftp пуст.Это небольшой фрагмент моего кода:

WriteToLocalFolder(content, filename);
WriteToSftpServer(filename, server logon params);

Может ли быть так, что WriteToSftpServer будет вызван до того, как WriteToLocalFolder закончит запись?Если да, как я могу сказать, что WriteToSftpServer должен начинаться только после того, как WriteToLocalFolder завершит запись файла?

WriteToLocalFolder выглядит следующим образом вреальный код:

 public static void WriteToFolder(StringBuilder content, string whereTo)
 {
    File.WriteAllText(whereTo, content.ToString());
 }

Так что поток закрыт, я думаю ...

Спасибо: -)

Ответы [ 4 ]

2 голосов
/ 22 февраля 2011

Код в WriteToSftpServer никогда не должен появляться до того, как WriteToLocalFolder будет выполнен (потому что он не выглядит асинхронным).Однако может быть, что файловый поток не закрыт должным образом и поэтому WriteToSftpServer не может получить к нему доступ.

Попробуйте получить точку останова внутри WriteToSftpServer, где файл загружается, чтобы посмотреть, что он загружает.Вы всегда можете «перейти дальше» внутри метода, если файл загружается правильно, чтобы увидеть, где он ломается.

0 голосов
/ 27 августа 2013
do
  {
     WriteToLocalFolder(content, filename);

  } while ((System.IO.File.Exists(filename) != true));


WriteToSftpServer(filename, server logon params);

этот цикл гарантирует, что файл существует с его содержимым перед переходом на следующую строку.

0 голосов
/ 22 февраля 2011

Это зависит от кода в WriteToLocalFolder, но более вероятно, что вы записываете содержимое в файл и забываете Flush буфер записи. Если это не так, пожалуйста, отредактируйте ваш вопрос и добавьте код для WriteToLocalFolder.

0 голосов
/ 22 февраля 2011

Если WriteToLocalFolder не создает отдельную нить, это НЕ возможно.Может быть, вам не хватает Stream.Flush, Stream.Close или Stream.Dispose в любом из методов?

...