|
Открыть одновременно текстовый файл для записи и чтения
|
|||
---|---|---|---|
#18+
Требуется, в одной программе, открыть текстовый файл для чтения, а в vfp, в это же время, этот же файл открыть для записи. fopen - с любыми параметрами, присылает -1 Пожалуйста, подскажите, как в фоксе открыть такой файл для записи ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2015, 00:06 |
|
Открыть одновременно текстовый файл для записи и чтения
|
|||
---|---|---|---|
#18+
Важно! файл д.б. постоянно открыт для чтения с одной стороны и для записи с другой. Вариант fopen-fclose не подходит. Возможно есть какието варианты открытия другими функциями, например winapi ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2015, 01:03 |
|
Открыть одновременно текстовый файл для записи и чтения
|
|||
---|---|---|---|
#18+
itgun, А смысл всего этого какой? Один пишет - другой читает? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2015, 10:08 |
|
Открыть одновременно текстовый файл для записи и чтения
|
|||
---|---|---|---|
#18+
FOPEN() не откроет файл если он открыт кем-то другим даже только на чтение. Если надо писать в конец Код: sql 1.
допишет в файл если кто-то его открыл на чтение, но открытым не держит. Я так логи пишу. Надо большего, кури WinAPI CreateFile() WriteFile() ReadFile() ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2015, 10:25 |
|
Открыть одновременно текстовый файл для записи и чтения
|
|||
---|---|---|---|
#18+
IgorNG, Так точно. Сетевая работа с текстовым файлом. Но запись ведет только один пользователь, остальные читают. Вся проблема в том что fopen с любыми параметрами для записи открывает в эксклюзивном режиме. Вот что нашел на замену : 1) Нашел функцию writefile в win32. http://www.news2news.com/vfp/?group=27&function=301 Если знаете как ее использовать в vfp буду благодарен помощи 2) нашел CreateObject("Scripting.FileSystemObject") https://msdn.microsoft.com/en-us/library/aa242706(v=vs.60).aspx Подходит, но в ней невозможно переместить указатель в файле ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2015, 11:00 |
|
Открыть одновременно текстовый файл для записи и чтения
|
|||
---|---|---|---|
#18+
Dima T, STRTOFILE не подходит. Она открывает и закрывает - это долго. Требование -файл должен быть открыт. В этом и проблема) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2015, 11:04 |
|
Открыть одновременно текстовый файл для записи и чтения
|
|||
---|---|---|---|
#18+
Значит, надо пользоваться технологиями FoxPro и писать в dbf, который предназначен для многопользовательского доступа. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2015, 11:08 |
|
Открыть одновременно текстовый файл для записи и чтения
|
|||
---|---|---|---|
#18+
itgun, что-то мне подсказывает что ты какой-то велосипед с квадратными колесами изобретаешь. Лучше бы задачу описал вкратце. Думаю есть более удачные решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2015, 11:47 |
|
Открыть одновременно текстовый файл для записи и чтения
|
|||
---|---|---|---|
#18+
Dima T, точно велосипед :) если не трудно, можно пример использования в фоксе WriteFile() ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2015, 12:18 |
|
Открыть одновременно текстовый файл для записи и чтения
|
|||
---|---|---|---|
#18+
Сам не использовал из фокса, родных средств всегда хватало. Отсюда 1376622 Один раз объявляешь Код: sql 1. 2.
Использовать так Код: sql 1. 2. 3. 4.
Только сначала надо открыть файл с помощью CreateFile() А там куча всяких разных флагов. Тут примеры использования 8963719 5738211 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2015, 12:39 |
|
Открыть одновременно текстовый файл для записи и чтения
|
|||
---|---|---|---|
#18+
Dima T, огромное спасибо за помощь. writefile прекрасно работает. Чтобы закрыть тему приведу пример кода который я получил в итоге * DEFINEs for file share mode. #DEFINE FILE_SHARE_READ 1 #DEFINE FILE_SHARE_WRITE 2 * DEFINEs for access right #DEFINE GENERIC_READ 0x80000000 #DEFINE GENERIC_WRITE 0x40000000 * DEFINES for Create Mode. #DEFINE CREATE_NEW 1 #DEFINE CREATE_ALWAYS 2 #DEFINE OPEN_EXISTING 3 #DEFINE OPEN_ALWAYS 4 #DEFINE TRUNCATE_EXISTING 5 #DEFINE FILE_ATTRIBUTE_NORMAL 0x80 DECLARE INTEGER CreateFile IN WIN32API ; STRING lpFileName, ; INTEGER dwDesiredAccess, ; INTEGER dwShareMode, ; INTEGER lpSecurityAttributes, ; INTEGER dwCreationDisposition, ; INTEGER dwFlagsAndAttributes, ; INTEGER hTemplateFile DECLARE INTEGER GetLastError IN WIN32API DECLARE INTEGER WriteFile IN WIN32API ; INTEGER hFile, ; STRING lpBuffer, ; INTEGER nNumberOfBytesToWrite, ; INTEGER @ lpNumberOfBytesWritten, ; INTEGER lpOverlapped DECLARE INTEGER SetFilePointer IN WIN32API ; INTEGER hFile, ; INTEGER lDistanceToMove, ; INTEGER lpDistanceToMoveHigh, ; INTEGER dwMoveMethod DECLARE INTEGER CloseHandle IN WIN32API ; INTEGER hObject LOCAL lcFileName, lhFileHandle, ln1, lcData, lnBytesWritten, llRes set defa to "d:\" lcFileName = "1.txt" lhFileHandle = CreateFile(m.lcFileName, BITOR(GENERIC_READ, GENERIC_WRITE), ; FILE_SHARE_READ, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0) IF m.lhFileHandle <= 0 MESSAGEBOX ("Error in CreateFile: Error code - " + ; LTRIM(STR(GetLastError()))) RETURN .F. ENDIF SET HOURS TO 24 SET DATE GERMAN FOR ln1 = 1 TO 5 lcData = TTOC(DATETIME()) + " " + LTRIM(STR(m.ln1)) + CHR(13) + CHR(10) lnBytesWritten = 0 llRes = WriteFile(m.lhFileHandle, m.lcData, LEN(m.lcData), @lnBytesWritten, 0) IF m.llRes = 0 MESSAGEBOX ("Error in WriteFile: Error code - " + ; LTRIM(STR(GetLastError()))) EXIT ENDIF llRes = SetFilePointer(m.lhFileHandle, 0,0,0) WAIT WINDOW m.lcData TIMEOUT 1 ENDFOR CloseHandle(m.lhFileHandle) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2015, 13:16 |
|
|
start [/forum/topic.php?fid=41&msg=39009626&tid=1582316]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 267ms |
total: | 408ms |
0 / 0 |