格式化文件并修改文件名

最近有一个需求,就是给一个目录,然后把里面所有的文件内容都修改,并修改文件名。

#include "stdafx.h"
#undef UNICODE
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;

void format(char *cfilename, string &newName);
void browseFile(char* path)
{
    char pattern[FILENAME_MAX + 1];
    sprintf(pattern, "%s\\*.*", path);

    char fdPath[FILENAME_MAX + 1];//file or document path

    WIN32_FIND_DATA findFileData;
    HANDLE hFindFile = FindFirstFile(pattern, &findFileData);

    if (hFindFile != INVALID_HANDLE_VALUE)
    {
        do
        {
            if (strcmp(findFileData.cFileName, ".") == 0 || strcmp(findFileData.cFileName, "..") == 0)
            {
                continue;
            }

            sprintf(fdPath, "%s\\%s", path, findFileData.cFileName);
            if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                cout<<fdPath<<endl;//对目录做一些操作
                browseFile(fdPath);//访问目录下面的内容

            }
            else
            {
                string newFileName;
                cout<<"\t"<<findFileData.cFileName<<endl;//对文件做一些操作
                ifstream fin;//#include <fstream>
                fin.open(fdPath);
                if(!fin)
                    cout<<"file "<<findFileData.cFileName<<" not exist"<<endl;
                else
                {

                    format(fdPath,newFileName);
                }
                fin.close();
                if (!rename(fdPath, newFileName.c_str()) == 0)
                    perror("rename");
            }
        }
        while (FindNextFile(hFindFile, &findFileData));
    }
    FindClose(hFindFile);
}
void format(char *cfilename, string &newFileName)
{
    ifstream fin;
    string filename(cfilename);
    fin.open(filename);
    vector<string> datas;
    string line;
    getline(fin,line);
    fin.clear();
    fin.seekg(0);
    vector<int> vindex;
    int pos = 0;
    while(line.npos !=(pos= line.find(" ",pos)))
    {
        vindex.push_back(pos++);
    }
    string exch = line.substr(vindex[1]+1,vindex[2]-vindex[1] - 1);
    exch.insert(0,"_");
    while(!fin.eof())
    {
        getline(fin,line);
        if(line=="")
            continue;
        vector<int> vindex;
        int pos = 0;
        while(line.npos !=(pos= line.find(" ",pos)))
        {
            vindex.push_back(pos++);
        }
        string sub1 = line.substr(vindex[3]+1,vindex[4]-1-vindex[3]);
        string sub2 = line.substr(vindex[7]+1,vindex[13]-1-vindex[7]);
        string sub3 = line.substr(vindex[15]+1,vindex[17]-1-vindex[15]);
        string sub4 = line.substr(vindex[19]+1,vindex[41]-1-vindex[19]);
        string r = sub1+" "+sub2+" "+sub3+" "+sub4;
        datas.push_back(r);
    }

    fin.close();

    ofstream fout;
    fout.open(filename,ios::trunc);//打开后清空文件
    vector<string>::iterator sitr = datas.begin();
    while(sitr != datas.end())
    {
        fout<<*sitr<<endl;
        ++sitr;
    }
    fout.close();

    int dotPos = filename.find_last_of(".");
    newFileName = filename;
    newFileName.insert(dotPos,exch);

}

int _tmain(int argc, _TCHAR* argv[])
{

    browseFile("C:\\Users\\ydu1\\Desktop\\ffff\\file");
    return 0;
}

格式化文件并修改文件名

时间: 2024-08-05 16:38:19

格式化文件并修改文件名的相关文章

php批量生成文件、修改文件名(easy)

<?php /* name:php 生成文件 author:MRT */ $a = 91; $b = 17; for($i = 0; $i<39; $i++){ $content = 'document.writeln("<p align=\"center\"><a href=\"http://swt.zjhm.com/466yy/shwt.htm\" target=\"_blank\" title=\&q

关于搜索全部文件和修改文件名的方法os.walk() 和os.listdir

os.walk()遍历所有的文件并列出各级,os.listdir()只列出当前文件下的条目,一个列表 1.os.walk() 大材小用. import os path = 'j:\\juypter\\爬虫\\百度图片\\' for dirnames, subnames, files in os.walk(path):#父目录,子目录,文件名称 for file in files:#只取files里的文件名,不含目录 new_name = '美女' + file os.rename(path +

一个批量修改文件夹中文件名的命令

1. 只修改当前目录下的文件 [root]# rename -s  \.png  \_iphone.png  * 这个是修改目录下 的所有文件名,加入一个后缀 如: 1.png    ->>>   1_iphone.png 2. 递归修改当前目录下的所有子文件夹 [root]# find ./ -name  "*.png" | xargs  -I {} rename -s \.png  \_iphone.png  {} 如: 2.png    ->>>

VBS自编写脚本。(实现批量修改文件名且在执行前,备份原有文件夹中的文件)

'=========================================================================='' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 4.0'' NAME: '' AUTHOR: Microsoft , Microsoft' DATE : 2014/7/9'' COMMENT: '批量修改文件夹下对应的所有文件名''==========

使用Java中File类批量创建文件和批量修改文件名

批量创建文件 1 int cont = 1; 2 String s = "E:\\学习资料\\Java笔记-"; 3 while(cont<100){ 4 File f = new File(s+cont+".txt"); 5 if(!f.exists()){ 6 f.createNewFile(); 7 } 8 cont++; 9 } 批量修改文件名 1 File file = new File("E:\\学习资料"); 2 String

python实践项目九:操作文件-修改文件名

描述:多个文件,文件名名包含美国风格的日期( MM-DD-YYYY),需要将它们改名为欧洲风格的日期( DD-MM-YYYY) 代码1:先创建100个文件名为美国风格日期的文件(文件路径为项目当前路径下) 1 #!/usr/bin/python 2 # -*- coding: UTF-8 -*- 3 #先创建一百个文件名为美国风格日期的文件 4 import os,random 5 for num in range(100): 6 mm=random.randint(1,12) 7 dd=ran

修改文件名与删除文件

修改文件名 //修改文件名 private void button1_Click(object sender, EventArgs e) { string oldfilename = textBox1.Text;//原文件路径 FileInfo finfo = new FileInfo(oldfilename);//获取文件的FileInfo对象 //新文件路径 string newFileName = oldfilename.Substring(0, oldfilename.LastIndex

批量修改文件名 文件后缀

文件夹中新建文本,输入代码,更改文本后缀为.bat 要更改的文件与文本放在同一文件夹 双击运行 1.批量删除文件后缀名 ren *.png* *.png 去掉“.下载” 运行后 2.批量删除文件重复后缀名 ren *.png *. 运行后 3.批量删除文件名前n个字符 @echo offsetlocal enabledelayedexpansion ::批量去掉文件名前N个字符,如果有文件夹会搜索文件夹下的每个文件进行修改set /p format=What suffix filename to

数据库的创建和文件的修改

在SQL Server中,使用Create Database创建数据库,使用Alter Database命令,能够修改数据库的数据文件和日志文件. 一,创建数据库 1,在创建数据库时,最佳实践是: 创建一个或多个文件组,并设置默认文件组 每个文件组中的数据文件和CPU的内核数据相同,将文件均匀分布在不同的物理硬盘上,使IO均匀分布在不同的物理磁盘上: 数据文件的初始大小,文件增长和最大大小保持一致,这样,能够使每个文件的IO次数相对均匀: 日志文件分配在性能最好的物理硬盘上,写日志的性能直接影响