将源代码文件转换为文本文件的一种方法
2016-10-03 00:00
197 查看
摘要: 工作当中常常会发现,由于公司的电脑处于加密模式,想要将源代码文件拷贝一份到自己的电脑上往往需要新建一个文本文件再将源代码文件复制粘贴到这个文本文件中,否则直接拷贝的文件将会是乱码。
如果需要拷贝的文件数少,复制粘贴的方法还可以试试,一旦文件数量太多,工作量将猛增,显然我们需要一种更为高效的方法。本文在visual studio 2010采用C++写出一个自己的小程序来解决这个问题。
基本的思想是,先检查当前目录下有多少种类型的源文件,比如.cpp,.c,.cc,.java等都属于不同类型的源文件,然后采用_finddata_t结构体表征不同类型的文件,通过_findfirst和_findnext函数一一进行匹配,直到全部找到为止。
再分别打开这些文件,并打开同名的文件加上.txt后缀,将源文件读入到文本文件当中,至此完成。
main.cpp
FileTran.cpp
FileTran.h
ListFile.cpp
ListFile.h
stdafx.cpp
stdafx.h
targetver.h
在visual studio 2010版及以上版本上编译,可生成.exe文件,将这个.exe文件和需要转换的源代码文件放到同一个目录中,打开.exe文件按照提示进行操作即可!
如果需要拷贝的文件数少,复制粘贴的方法还可以试试,一旦文件数量太多,工作量将猛增,显然我们需要一种更为高效的方法。本文在visual studio 2010采用C++写出一个自己的小程序来解决这个问题。
基本的思想是,先检查当前目录下有多少种类型的源文件,比如.cpp,.c,.cc,.java等都属于不同类型的源文件,然后采用_finddata_t结构体表征不同类型的文件,通过_findfirst和_findnext函数一一进行匹配,直到全部找到为止。
再分别打开这些文件,并打开同名的文件加上.txt后缀,将源文件读入到文本文件当中,至此完成。
main.cpp
#include "stdafx.h" #include "FileTran.h" #include "ListFile.h" #include<iostream> #include<windows.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { try{ FileTran fileTran; ListFile listFile; listFile.listFiles(); printf("listfile\n"); unsigned int num=listFile.getNum(); printf("num=%d\n",num); unsigned int i=0; while(i<num){ cout<<listFile.getFile(i)<<endl; if(fileTran.openFile(listFile.getFile(i))){ fileTran.handleFile(); i++; if(i==8)break; } } } catch(...){ printf("something is wrong!\n"); } std::cout<<"--------done"<<std::endl; Sleep(2000); return 0; }
FileTran.cpp
#include "StdAfx.h" #include "FileTran.h" #include <cstdio> #include <string> #include<iostream> using std::ios_base; using std::string; using std::getline; FileTran::FileTran(void) { } FileTran::~FileTran(void) { close(); } bool FileTran::openFile(const char* filename) { finFile.open(filename,ios_base::in|ios_base::binary); if(!finFile.is_open()){ printf("can not open the file,please check it out!\n"); throw "open error"; } else{ this->filename=filename; printf("File opened\n"); return true; } } void FileTran::close() { } void FileTran::handleFile() { string tmpname=string(filename)+string(".txt"); if(finFile.is_open()){ foutFile.open(tmpname.c_str(),ios_base::out|ios_base::binary); if(!foutFile.is_open()){ throw "something is wrong"; } } string str; while(!finFile.eof()){ std::getline(finFile,str); foutFile<<str<<std::endl; } finFile.close(); foutFile.close(); }
FileTran.h
#ifndef _FILETRAN_ #define _FILETRAN_ #include<fstream> using std::ifstream; using std::ofstream; class FileTran { public: FileTran(void); ~FileTran(void); public: bool openFile(const char*); void handleFile(); private: void close(); private: const char* filename; ifstream finFile; ofstream foutFile; }; #endif //file tran
ListFile.cpp
#include "StdAfx.h" #include "ListFile.h" #include<iostream> #include<fstream> #include<io.h> #include<windows.h> #include<tchar.h> ListFile::ListFile(void) { } ListFile::~ListFile(void) { } unsigned int ListFile::listFiles() { unsigned int cnt=0; char buf[SIZEFILE*2]; printf("Please enter all sorts of files you wanna transfer:"); while(EOF==scanf("%d",&kindsFiles)){ printf("enter is wrong!\n"); } printf("Please enter the regulations of files,for example: \"*.c\" means all .c files would be listed!\n"); while(EOF!=scanf("%s",regs[cnt++])){ if(cnt==kindsFiles) break; } cnt=0; while(cnt!=kindsFiles){ struct _finddata_t files; long handle=_findfirst(regs[cnt++],&files); if(-1==handle){ printf("can not match the files!\n"); while(true); exit(-1); } string tmp=string(files.name); filesList.push_back(tmp); while(!_findnext(handle,&files)){ tmp=string(files.name); filesList.push_back(tmp); } } nums=filesList.size(); return nums; } void ListFile::disFiles() { list<string>::iterator listPtr=filesList.begin(); for(int i=0;i<nums;i++,listPtr++){ strcpy(allFiles[i],listPtr->c_str()); } } char* ListFile::getFile(unsigned int n) { disFiles(); return allFiles ; } unsigned int ListFile::getNum() { return nums; }
ListFile.h
#ifndef _LISTFILE_ #define _LISTFILE_ #include<cstdio> #include<string> #include<list> #define SIZEFILE 80 #define NUMFILE 80 using std::string; using std::list; class ListFile { public: ListFile(void); ~ListFile(void); private: unsigned int kindsFiles; char regs[NUMFILE][SIZEFILE]; list<string> filesList; char allFiles[NUMFILE][SIZEFILE]; unsigned int nums; public: unsigned int listFiles(); void disFiles(); char* getFile(unsigned int); unsigned int getNum(); }; #endif //list file
stdafx.cpp
#include "stdafx.h"
stdafx.h
#pragma once #include "targetver.h" #include <stdio.h> #include <tchar.h>
targetver.h
#pragma once // 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。 // 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将 // WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。 #include <SDKDDKVer.h>
在visual studio 2010版及以上版本上编译,可生成.exe文件,将这个.exe文件和需要转换的源代码文件放到同一个目录中,打开.exe文件按照提示进行操作即可!
相关文章推荐
- 一种简洁明了地读取文本文件的方法
- java输出excel数据的方法示例(一种是到excel,一种是结构化数据到文本文件,可以用editplus之类的看)
- 介绍一种巧妙的删除程序自己的方法
- PHP实现文件上传的一种好方法
- 一种解决HTML Jmail信件乱码的方法:
- 解决java/jsp乱码的一种转换方法
- 使用LDAP进行系统验证的一种方法
- 在VC下显示JPEG、GIF格式图像的一种简便方法
- 在VB.net中为DATAGRID控件增加一个删除按钮的一种方法
- 介绍一种巧妙的删除程序自己的方法
- B/S系统权限控制的一种简单方法
- C++中建立对象间消息连接的一种系统方法
- JSP数据和JavaScirpt数据交互使用问题的一种解决方法
- C++中建立对象间消息连接的一种系统方法
- 解开硬盘逻辑死锁的一种有效方法
- 用户登录后重定向的一种新方法
- 在datagrid的某列上包含dropdownlist控件的一种方法
- ATL实现Connection Point的一种简单的方法
- 一种实现数据库连接池的方法(JAVA)
- .NET中书写XML的一种简单方法