Не удается записать в файл, когда он открыт в MS Excel - PullRequest
4 голосов
/ 28 ноября 2011

Я пишу в текстовый файл некоторые данные. Я использую этот код:

  using (FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
  {
      using (TextWriter tw = new StreamWriter(fs))
      {
      tw.WriteLine("sample_data");
      }
   }

Когда файл открывается с помощью блокнота, мое приложение может писать в него. Когда этот файл открывается MS Excel, я получаю следующую ошибку: Процесс не может получить доступ к файлу myfile.csv, потому что он используется другим процессом . Что может вызвать эту ситуацию и как я могу решить эту проблему?

Ответы [ 3 ]

8 голосов
/ 28 ноября 2011

Блокнот открывает файл, считывает все содержимое, а затем закрывает файл.Вы даже можете удалить файл, открытый в блокноте.

Excel, с другой стороны, сохраняет файл открытым, пока он отображается.Есть несколько специальных инструментов обмена, которые могут быть включены в Excel для файлов формата Excel.В таком случае я предполагаю, что он открывается не эксклюзивно.В противном случае Excel открывает файл исключительно и сохраняет его открытым.

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

1 голос
/ 28 ноября 2011

Excel заблокирует файл при его открытии, что предотвращает взаимодействие с файлом. Один из способов обойти это заключается в том, что я написал код для сканирования процессов Excel на локальном компьютере и уничтожил эти процессы перед доступом к файлу, который был открыт с помощью Excel. Вы можете определить, заблокирован ли файл, посмотрев Как проверить блокировку файла? и запустив код уничтожения процесса в обработчике исключений.

0 голосов
/ 28 ноября 2011

Откройте файл csv с помощью OleDB и используйте операторы INSERT и / или UPDATE.

...