| 89 | } |
| 90 | |
| 91 | queue_file* queue_manager::open_file(const char* filePath, bool no_cache /* = true */) |
| 92 | { |
| 93 | string home, queueName, queueSub, partName, extName; |
| 94 | if (!queue_manager::parse_filePath(filePath, &home, &queueName, |
| 95 | &queueSub, &partName, &extName)) { |
| 96 | |
| 97 | logger_error("filePath(%s) invalid", filePath); |
| 98 | return NULL; |
| 99 | } |
| 100 | |
| 101 | queue_file* fp; |
| 102 | |
| 103 | // ������ļ��������ڴ�����ֱ�ӷ���֮ |
| 104 | fp = cache_find(partName); |
| 105 | if (fp != NULL) { |
| 106 | if (no_cache) { |
| 107 | logger_warn("file: %s locked", filePath); |
| 108 | return NULL; |
| 109 | } |
| 110 | return fp; |
| 111 | } |
| 112 | |
| 113 | // �Ӵ��̴��Ѿ����ڵĶ����ļ� |
| 114 | fp = NEW queue_file; |
| 115 | if (!fp->open(home.c_str(), queueName.c_str(), queueSub.c_str(), |
| 116 | partName.c_str(), extName.c_str())) { |
| 117 | |
| 118 | delete fp; |
| 119 | return NULL; |
| 120 | } |
| 121 | cache_add(fp); |
| 122 | return fp; |
| 123 | } |
| 124 | |
| 125 | bool queue_manager::close_file(queue_file* fp) |
| 126 | { |