|
|
|
Проблема с доступом к файлу.
|
|||
|---|---|---|---|
|
#18+
Всем привет! Есть расширенная процедура, которая берет файлы, обрабатывает их, создавая конечный файл и результаты загружает в БД. ИНОГДА Проблема возникает при попытке загрузить конечный файл в БД (через bcp), т.к. результирующий файл остается занятым каким-то процессом (Да и программа определяет что в такие моменты длина файла = 0, но если немного подождать (0.5-1.5 сек) то все становится так как надо: длина > 0). Так что получается, что fclose(...) которым я закрываю конечный файл, отрабатывает , а файл тем неменее остается открытым? Есть ли какие-нить способы проверять это, кроме того, которым пользуюсь я?. Заранее спасибо. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 11:01 |
|
||
|
Проблема с доступом к файлу.
|
|||
|---|---|---|---|
|
#18+
Перед fclose попробуй fflush сказать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 11:11 |
|
||
|
Проблема с доступом к файлу.
|
|||
|---|---|---|---|
|
#18+
А Вы уверены что это поможет? может дело в чем-то другом? The fclose function closes stream. All buffers associated with the stream are flushed prior to closing. System-allocated buffers are released when the stream is closed. Buffers assigned by the user with setbuf and setvbuf are not automatically released. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 12:36 |
|
||
|
Проблема с доступом к файлу.
|
|||
|---|---|---|---|
|
#18+
Мне кажется что я нашел способ решить эту проблему: мне нужно вообще запретить буферизацию при записи в файл. Код: plaintext int setvbuf( FILE *stream, char *buffer, int mode, size_t size ); Осталось только протестировать в "боевом" варианте а на это может уйти несколько дней т.к. ошибка встречается довольно-таки редко. Всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2004, 13:41 |
|
||
|
Проблема с доступом к файлу.
|
|||
|---|---|---|---|
|
#18+
Ну дык, если запись идёт часто, буфер будет загружен и может запросто не успевать за программой, можно на всякий случай сделать while (ошибка_записи_в_файл) { Sleep(100); Пишем_в_файл(); } fflush может не помочь, так как скорее всего автоматом зовётся при fclose. fflush бывает полезен, когда файл долго открыт и постоянно ведётся запись(чтобы видеть, ведётся она на самом деле или нет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2004, 07:27 |
|
||
|
Проблема с доступом к файлу.
|
|||
|---|---|---|---|
|
#18+
> while (ошибка_записи_в_файл) Так вся фигня в том, что fprintf то нормально отрабатывает и никаких ошибок не выдает. А насчет Sleep() это идея! Я её засуну в свой цикл переоткрытия файла чтоб ресурсы системы особо не отъедать. Да, кстати, setvbuf() не очень то помог: правда проблем с проверкой размера файла не было но при BULKCOPY почему-то возникла ошибка. Так что в результате я вернулся к своему первоначальному варианту проги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2004, 10:08 |
|
||
|
Проблема с доступом к файлу.
|
|||
|---|---|---|---|
|
#18+
авторТак вся фигня в том, что fprintf то нормально отрабатывает и никаких ошибок не выдает. Сорри, я нагнял. Не ошибка_записи_в_файл, а ошибка_доступа_к_файлу. Тобишь, пока система его записать не успела полность, получить данные о файле или содержимом не получится. 100% работает - отрыть файл на редактирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2004, 13:10 |
|
||
|
|

start [/forum/topic.php?fid=57&tid=2035233]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 253ms |
| total: | 380ms |

| 0 / 0 |
