Иногда возникает необходимость скопировать папку проекта (Visual Studio), например, на флешку или в сетевую шару. Проблемой становятся файлы, которые нагенерировала студия: база Intellisense, логи, объектные файлы и т.п. Из простого копирования нескольких *.cpp файлов процесс может превратиться в довольно длительное ожидание или нехватку места
Написал небольшую утилитку которая удаляет "лишние" файлы студии в указанной папке и подпапках. Пример использования:
.\vsgarbage D:\Projects\CPP\HelloWorld
Код утилиты:
#include <iostream>
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
typedef std::vector<std::string> GarbageList;
GarbageList g_garbage_extensions;
const int EQUALS = 0; // Strings are equals
void InitializeGarbageFileExtensions(GarbageList& list)
{
list.push_back(".obj");
list.push_back(".log");
list.push_back(".sdf");
list.push_back(".ipch");
list.push_back(".idb");
list.push_back(".pdb");
list.push_back(".ilk");
list.push_back(".dep");
list.push_back(".tmp");
list.push_back(".tlog");
list.push_back(".lastbuildstate");
list.push_back(".opensdf");
}
bool IsGarbage(fs::path& item)
{
if (!fs::is_directory(item)) // Only files are checked
{
std::string extension = item.extension();
for (GarbageList::iterator it = g_garbage_extensions.begin();
it != g_garbage_extensions.end(); ++it)
{
std::string& current = (*it);
if (extension.compare(current) == EQUALS)
{
return true;
}
}
}
return false;
}
int main(int argc, char** argv)
{
if (argc > 1)
{
char* dir = argv[1];
std::cout << "Deleting garbage in: " << dir << std::endl;
fs::path dir_path(dir);
if (fs::is_directory(dir_path))
{
InitializeGarbageFileExtensions(g_garbage_extensions);
fs::recursive_directory_iterator end_it;
int items_removed = 0;
for (fs::recursive_directory_iterator it(dir_path); it != end_it; ++it)
{
fs::path current(it->path());
if (IsGarbage(current))
{
fs::remove(current);
items_removed++;
}
}
std::cout << "Items deleted: " << items_removed << std::endl;
}
else
{
std::cerr << "Error. Specified path is not a directory\n";
}
}
else
{
std::cout << "Usage: .\\vsgarbage path_to_directory\n";
}
return 0;
}
Готовный бинарник можно взять в прикрепленных файлах.
Здравствуйте, InstantI, Вы писали:
II>Иногда возникает необходимость скопировать папку проекта (Visual Studio), например, на флешку или в сетевую шару. Проблемой становятся файлы, которые нагенерировала студия: база Intellisense, логи, объектные файлы и т.п. Из простого копирования нескольких *.cpp файлов процесс может превратиться в довольно длительное ожидание или нехватку места Написал небольшую утилитку которая удаляет "лишние" файлы студии в указанной папке и подпапках. Пример использования:
хм, я пользуюсь батовским файлом. В проектах студии настроено, что все создаваемые файлы создаются в output
@echo off
echo remove Output folder
rmdir /S /Q Output
rem Visual Studio 2010 создаёт этот каталог
rmdir /S /Q ipch
echo remove Visual Studio temporary files
del /s *.ncb
del /s *.obj
del /s *.pch
del /s *.pdb
del /s *.dep
del /s BuildLog.htm
rem del /s *.filters
del /s *.idb
del /s *.user
del /s *.aps
del /s *.sdf
del /s *.users
Я пользуюсь программкой, которая встраивается в меню оболочки и для файлов sln содержит пунктики Build и Clean. Очень удобно.
здесь