Совместное использование C ++ CFile с C # App не работает?

У меня проблемы с получением файла, созданного и заполненного приложением c ++, для чтения другим приложением c #, пока оно еще открыто в приложении c ++.

Я создаю файл со строкой:

txtFile.Open(m_FileName, CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite, &e)

Я также пытался использовать строки:

txtFile.Open(m_FileName, CFile::modeCreate|CFile::modeWrite|CFile::shareDenyNone, &e)

а также:

txtFile.Open(m_FileName, CFile::modeCreate|CFile::modeWrite, &e)

с такими же результатами.

Затем в приложении c # я попробовал 2 разных способа открытия файла:

FileStream fs = File.OpenRead(inputfilepath);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();

а также

byte[] buffer;
using (FileStream stream = new FileStream(inputfilepath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
}

Оба метода ловят ошибку:

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

Приложение c ++ создает файл, а затем использует CreateProcess для запуска приложения c #.

Я ожидаю, что проблема заключается в коде c #, где я пытаюсь прочитать файл, поскольку блокнот не выдает ошибок при добавлении разрешений для общего ресурса в приложении c ++, но выдает ошибки, когда я не устанавливаю разрешения.

В конце концов я заставил его работать так, как я хотел, с предложением Сунтса.

Установка опции обмена файлами c ++:

txtFile.Open(m_FileName, CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite, &e)

Позволяет приложению c # читать файл, но не записывать в него.

в приложении C # чтение файла с:

using (FileStream stream = new FileStream(inputfilepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))

Устанавливает доступ к файлу только для чтения. Но, установив права доступа к файлу для чтения, можно открыть файл во время записи в другое приложение. Я ошибался, когда права доступа к файлу были доступны только для чтения, поскольку они конфликтовали с приложением c ++ еще до открытия файла. Так что не откроется.

0

Решение

В C ++ укажите CFile :: shareDenyNone или CFile :: shareDenyWrite (как вы делаете)

В C # укажите FileShare.Write или FileShare.ReadWrite.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]