bool MothurOut::dirCheck(string& dirName){
try {
+ if (dirName == "") { return false; }
+
string tag = "";
#ifdef USE_MPI
int pid;
//test to make sure directory exists
dirName = getFullPathName(dirName);
- string outTemp = dirName + tag + "temp";
+ string outTemp = dirName + tag + "temp"+ toString(time(NULL));
ofstream out;
out.open(outTemp.c_str(), ios::trunc);
if(!out) {
exit(1);
}
}
+/***********************************************************************/
+int MothurOut::openInputFileBinary(string fileName, ifstream& fileHandle){
+ try {
+
+ //get full path name
+ string completeFileName = getFullPathName(fileName);
+#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix)
+#ifdef USE_COMPRESSION
+ // check for gzipped or bzipped file
+ if (endsWith(completeFileName, ".gz") || endsWith(completeFileName, ".bz2")) {
+ string tempName = string(tmpnam(0));
+ mkfifo(tempName.c_str(), 0666);
+ int fork_result = fork();
+ if (fork_result < 0) {
+ cerr << "Error forking.\n";
+ exit(1);
+ } else if (fork_result == 0) {
+ string command = (endsWith(completeFileName, ".gz") ? "zcat " : "bzcat ") + completeFileName + string(" > ") + tempName;
+ cerr << "Decompressing " << completeFileName << " via temporary named pipe " << tempName << "\n";
+ system(command.c_str());
+ cerr << "Done decompressing " << completeFileName << "\n";
+ mothurRemove(tempName);
+ exit(EXIT_SUCCESS);
+ } else {
+ cerr << "waiting on child process " << fork_result << "\n";
+ completeFileName = tempName;
+ }
+ }
+#endif
+#endif
+
+ fileHandle.open(completeFileName.c_str(), ios::binary);
+ if(!fileHandle) {
+ mothurOut("[ERROR]: Could not open " + completeFileName); mothurOutEndLine();
+ return 1;
+ }
+ else {
+ //check for blank file
+ gobble(fileHandle);
+ if (fileHandle.eof()) { mothurOut("[ERROR]: " + completeFileName + " is blank. Please correct."); mothurOutEndLine(); }
+
+ return 0;
+ }
+ }
+ catch(exception& e) {
+ errorOut(e, "MothurOut", "openInputFileBinary");
+ exit(1);
+ }
+}
+/***********************************************************************/
+int MothurOut::openInputFileBinary(string fileName, ifstream& fileHandle, string noerror){
+ try {
+
+ //get full path name
+ string completeFileName = getFullPathName(fileName);
+#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix)
+#ifdef USE_COMPRESSION
+ // check for gzipped or bzipped file
+ if (endsWith(completeFileName, ".gz") || endsWith(completeFileName, ".bz2")) {
+ string tempName = string(tmpnam(0));
+ mkfifo(tempName.c_str(), 0666);
+ int fork_result = fork();
+ if (fork_result < 0) {
+ cerr << "Error forking.\n";
+ exit(1);
+ } else if (fork_result == 0) {
+ string command = (endsWith(completeFileName, ".gz") ? "zcat " : "bzcat ") + completeFileName + string(" > ") + tempName;
+ cerr << "Decompressing " << completeFileName << " via temporary named pipe " << tempName << "\n";
+ system(command.c_str());
+ cerr << "Done decompressing " << completeFileName << "\n";
+ mothurRemove(tempName);
+ exit(EXIT_SUCCESS);
+ } else {
+ cerr << "waiting on child process " << fork_result << "\n";
+ completeFileName = tempName;
+ }
+ }
+#endif
+#endif
+
+ fileHandle.open(completeFileName.c_str(), ios::binary);
+ if(!fileHandle) {
+ //mothurOut("[ERROR]: Could not open " + completeFileName); mothurOutEndLine();
+ return 1;
+ }
+ else {
+ //check for blank file
+ gobble(fileHandle);
+ //if (fileHandle.eof()) { mothurOut("[ERROR]: " + completeFileName + " is blank. Please correct."); mothurOutEndLine(); }
+
+ return 0;
+ }
+ }
+ catch(exception& e) {
+ errorOut(e, "MothurOut", "openInputFileBinary - no error");
+ exit(1);
+ }
+}
+
/***********************************************************************/
int MothurOut::renameFile(string oldName, string newName){
ifstream input;
//open output file in append mode
- openOutputFileAppend(filename, output);
- int ableToOpen = openInputFile(temp, input, "no error");
+ openOutputFileBinaryAppend(filename, output);
+ int ableToOpen = openInputFileBinary(temp, input, "no error");
//int ableToOpen = openInputFile(temp, input);
int numLines = 0;
exit(1);
}
}
+/**************************************************************************************************/
+int MothurOut::appendBinaryFiles(string temp, string filename) {
+ try{
+ ofstream output;
+ ifstream input;
+
+ //open output file in append mode
+ openOutputFileBinaryAppend(filename, output);
+ int ableToOpen = openInputFileBinary(temp, input, "no error");
+
+ if (ableToOpen == 0) { //you opened it
+
+ char buffer[4096];
+ while (!input.eof()) {
+ input.read(buffer, 4096);
+ output.write(buffer, input.gcount());
+ }
+ input.close();
+ }
+
+ output.close();
+
+ return ableToOpen;
+ }
+ catch(exception& e) {
+ errorOut(e, "MothurOut", "appendBinaryFiles");
+ exit(1);
+ }
+}
+
/**************************************************************************************************/
int MothurOut::appendFilesWithoutHeaders(string temp, string filename) {
try{
exit(1);
}
}
+/***********************************************************************/
+string MothurOut::mothurGetpid(int threadID){
+ try {
+
+ string pid = "";
+#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix)
+
+ pid += toString(getpid()); if(debug) { mothurOut("[DEBUG]: " + pid + "\n"); }
+ //remove any weird chars
+ string pid1 = "";
+ for (int i = 0; i < pid.length(); i++) {
+ if(pid[i]>47 && pid[i]<58) { //is a digit
+ pid1 += pid[i];
+ }
+ }
+ pid = pid1;
+#else
+ pid += toString(threadID);
+#endif
+ return pid;
+ }
+ catch(exception& e) {
+ errorOut(e, "MothurOut", "mothurGetpid");
+ exit(1);
+ }
+}
+
/***********************************************************************/
bool MothurOut::isLabelEquivalent(string label1, string label2){