1 |
kusanagi |
1.1 |
#include <log4cxx/logger.h> |
2 |
|
|
#include <YFile.h> |
3 |
|
|
|
4 |
|
|
using namespace log4cxx; |
5 |
|
|
using namespace yngn; |
6 |
|
|
using namespace yngn::util; |
7 |
|
|
using namespace yngn::YException; |
8 |
|
|
|
9 |
|
|
TFile *YFile::yfile = 0; |
10 |
|
|
static LoggerPtr logger = Logger::getLogger(_T("yngn.util.YFile")); |
11 |
|
|
|
12 |
|
|
/** |
13 |
|
|
* Open/copy a file from remote (rfio) or local path. |
14 |
|
|
* This solution have been implemented mainly because the CASTOR system could have performance problem in |
15 |
|
|
* case of interactive file opening: the use of the "copy" flag, allow the minimum change for the existing |
16 |
|
|
* softwares. |
17 |
|
|
* @param url Path to the database to be used. |
18 |
|
|
* @param options Path to the database to be used. |
19 |
|
|
* @param copy Flag to define if the file have to be copied on a specified path or not. Default si false. |
20 |
|
|
* @param path Where to copy the file. Default is local. |
21 |
|
|
*/ |
22 |
|
|
TFile* YFile::Open(const char *url, const char* options, bool copy, const char *path) throw (YNotExistingFileException, YSystemCommandException) { |
23 |
|
|
const char *name; |
24 |
|
|
if ((copy) && (strlen(strstr(url, "rfio:/")) > 0)){ |
25 |
|
|
char cmd[999]; |
26 |
|
|
//Here do the copy of the remote file |
27 |
|
|
if (copy){ |
28 |
|
|
strcpy (cmd,"rfcp "); |
29 |
|
|
strcat (cmd,url+5); |
30 |
|
|
strcat (cmd," "); |
31 |
|
|
strcat (cmd, path); |
32 |
|
|
if (system(cmd) == 0) throw YSystemCommandException(cmd); |
33 |
|
|
name = strrchr(url,'/'); |
34 |
|
|
} |
35 |
|
|
} else { |
36 |
|
|
name = url; |
37 |
|
|
} |
38 |
|
|
yfile = TFile::Open(name, options); |
39 |
|
|
if (yfile == 0) throw YNotExistingFileException(url); |
40 |
|
|
return yfile; |
41 |
|
|
} |