Программное обеспечение foxpro читает, записывает и обновляет записи в файле DBF. Я параллельно читаю тот же самый DBF в приложении c ++. Будут ли какие-либо проблемы, если я буду долго хранить в моих приложениях c ++ файл DBF?
Вопреки ответу выше формат DBF конечно многопользовательские, почти каждое реальное приложение, которое их использует, является многопользовательским, например, у нас есть приложения, используемые сотнями пользователей.
Может быть проблема в том, что ваше приложение C ++ не учитывает механизм блокировки, который будет использовать FoxPro, но это не то же самое. Если вы правильно используете драйвер Microsoft Visual FoxPro OLEDB на стороне C ++, у вас не возникнет проблем, но да, как и в случае чего-либо подобного, открывайте и закрывайте DBF как можно быстрее.
Таблицы VFP основаны на файлах и используют общую блокировку при обновлении. Если вы делаете чтение непосредственно (низкий уровень), то только чтение не будет проблемой. Так как в любом случае это данные, а лучшими оптимизированными считывателями являются драйверы OLEDB \ ODBC (драйверы ODBC существуют до версии 6. Для более поздних версий Sybase Advantage Server имеет драйвер — локально бесплатный, удаленный платный AFAIK, но я не использую).
Я давно использую таблицы DBF из VFP (да из VFP) и C # через VFPOLEDB, и я могу сказать, что у меня не было проблем. На самом деле, драйвер работает лучше от C # против VFP, я не знаю почему.
Также обратите внимание, что, когда вы используете драйвер VFPOLEDB, вы используете режим ANSI по умолчанию (и общий для чтения \ записи, если вы не измените режим).
dbf
Формат не многопользовательский. Если ваше приложение c ++ только читает, а не обновляет, то у вас не будет повреждения данных на диске … однако, вы можете получить «повреждение данных» в своем приложении c ++, если вы случайно прочитаете запись, пока приложение Foxpro обновляет его. Вы можете минимизировать этот риск, всегда закрывая и открывая файл dbf (в вашем приложении c ++), но вы не можете заставить его полностью исчезнуть.
Если вы можете заставить приложение Foxpro периодически делать копию, и приложение c ++ будет использовать эту копию, то все будет в порядке, хотя данные могут быть немного устаревшими.