Несколько исполняемых файлов, обращающихся к одной и той же папке одновременно

У нас есть приложение python, которое проверяет каталог (C:\sample\folder) каждые 5 секунд, также есть это внешнее приложение (приложение .net), которое помещает файл в тот же каталог (C:\sample\folder).

Будет ли конфликт при одновременном доступе двух приложений к одной и той же папке (случайно)?

Такие конфликты:

  • внешнее приложение не сможет разместить файл, потому что приложение python в настоящее время проходит через тот же каталог?

person ellaRT    schedule 08.12.2015    source источник
comment
не должно быть проблем, если оба не обращаются к одному и тому же файлу. поэтому вы должны позаботиться о правильной обработке исключений ввода-вывода и подумать о каком-то поведении ожидания и повторной попытки.   -  person Marco Forberg    schedule 08.12.2015
comment
Нет. Единственный конфликт может заключаться в том, что внешнее приложение начинает записывать файл в каталог, а приложение python проверяет каталог и реализует новый файл и пытается получить доступ к новому файлу до того, как он будет полностью записан.   -  person Oguz Ozgul    schedule 08.12.2015
comment
Внешнее приложение просто копирует и вставляет файл в каталог. Нет письменной форме. Спасибо за подтверждение @MarcoForberg и Oguz   -  person ellaRT    schedule 08.12.2015


Ответы (1)


Для внешнего приложения должно быть нормально создавать и записывать в файл. Если приложение Python читает файл, приложение .NET может не иметь возможности писать в него, пока Python его читает, однако оба процесса не откроют файл общим способом.

Аналогичным образом, если приложение Python собирается начать чтение только что созданного файла, оно может либо обнаружить, что не может этого сделать, пока приложение .NET не завершит запись в него, либо может прочитать неполные данные. Опять же, вполне возможно, что потребуются изменения в обоих процессах, чтобы разрешить чтение вообще.

Стоит тщательно протестировать все возможности, о которых вы беспокоитесь, возможно, включая создание «поддельного» внешнего приложения, которое очень медленно записывает в файл, но открывает его так же, как и настоящее.

person Jon Skeet    schedule 08.12.2015
comment
Спасибо, @Джон Скит. Внешний - это просто копирование и вставка файла в тот же каталог, без записи. Спасибо, что подтвердили это. - person ellaRT; 08.12.2015
comment
@anon: Если он копирует файл, то записывает в него. Файлы не существуют без записи :) Теперь, если бы это была операция перемещения в той же файловой системе, она могла бы быть атомарной, и в этом случае вам не нужно было бы беспокоиться... но копирует нет. - person Jon Skeet; 08.12.2015
comment
О, я вижу @Jon Skeet, так что это означает, что когда внешнее приложение копирует файл в каталог, и питон его видит, возможно ли, что они пытаются получить к нему доступ одновременно? Конечно, python не сможет его открыть, верно? - person ellaRT; 08.12.2015
comment
@anon: Это зависит от того, как код C# копирует его и как код Python получает к нему доступ. (Странно говорить о вставке копии приложения — обычно это либо вызов метода Copy, либо явное открытие файла и запись в него. Маловероятно, что это будет операция буфера обмена. У вас есть исходный код для приложение С#?) - person Jon Skeet; 08.12.2015
comment
К сожалению, у меня нет исходного кода для приложения С#, у меня есть только python. @Jon Skeet, рабочий процесс python заключается в том, что он использует os.walk, и когда он находит файл, который он открывает, он читает файл. - person ellaRT; 08.12.2015
comment
@anon: Хорошо, тогда трудно сказать наверняка. Вы должны, по крайней мере, учитывать возможность существования файла, который вы еще не можете прочитать. В идеале постарайтесь найти способ проверить это, но на самом деле вам нужно знать, как приложение C # открывает дескриптор файла :( - person Jon Skeet; 08.12.2015
comment
Спасибо @Jon Skeet, по крайней мере, я знаю, куда идти дальше. Попытаюсь смоделировать другую ситуацию обработки файла. Большое спасибо! - person ellaRT; 08.12.2015