简介
作为ACMer平时会写很多代码,很多代码开了工程,工程积累多了以后一是占用空间,二是整理起来不方便,于是我查找了网上的资料,自己写了一个可以用来把工程代码变为单个cpp,java文件的小程序。
使用说明
关键的变量为 dir 也就是递归开始的文件夹,根据需要自己定义就行了。
由于我使用的IDE是codeblocks+eclipse,该工具比较适合这种组合。
对于codeblocks的工程会将main.cpp重命名为”main.cpp所在文件夹名称”.cpp
对于eclipse的工程会把Main.java重命名为”src所在文件夹”.java
引号内的内容会根据文件进行判断。
使用效果
上面这个文件夹是个java工程,下面的是个cb的工程。
程序执行会报告处理的文件夹。
处理完之后就是两个文件了。
代码
#include <cstdio>
#undef UNICODE
#define MAX_RESULT 256
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <string>
#include <vector>
#include <iostream>
typedef long long LL;
using namespace std;
// head
string bk(string &s) {
return s.substr(0, s.find_last_of('\\'));
}
string getFile(string &s) {
return s.substr(s.find_last_of('\\')+1);
}
void EnumFiles(string dir, string pa, string fname) {
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
vector<string> result;
string pattern;
pattern = dir;
pattern += "\\**";
hFind = FindFirstFile(pattern.c_str(), &FindFileData);
if (hFind != INVALID_HANDLE_VALUE) {
while (FindNextFile(hFind, &FindFileData) != 0) {
result.push_back(FindFileData.cFileName);
}
}
int len = result.size();
FindClose(hFind);
for (int i = 0; i < len; i++) {
if (result[i][0] != '.') {
if (result[i] == "main.cpp") {
CopyFile((dir+"\\"+result[i]).c_str(), (pa + "\\" + fname + ".cpp").c_str(), TRUE);
system(("rd /s/q \"" + dir+"\"").c_str());
printf("rd /s/q \"%s\"\n", dir.c_str());
} else if (result[i] == "Main.java") {
string p = bk(pa), fn = getFile(pa);
CopyFile((dir+"\\"+result[i]).c_str(), (p + "\\" + fn + ".java").c_str(), TRUE);
system(("rd /s/q \"" + p + "\\" + fn + "\"").c_str());
puts(("rd /s/q \"" + p + "\\" + fn + "\"").c_str());
} else {
EnumFiles((dir+"\\"+result[i]).c_str(), dir, result[i]);
}
}
}
}
int main() {
//string dir = "G:\\0软件工程\\c++\\ACM程序";
//string dir = "C:\\Users\\ned\\Desktop\\test";
EnumFiles(dir, "", "");
return 0;
}