나는 모든 반복에서 입자 좌표로 .dat
파일을 생성하는 입자 시스템 프로그램을 가지고 있습니다. 최종 목표는 다른 매개 변수를 가진 스크립트를 통해 프로그램을 여러 번 실행하는 것입니다. 그래서, 모든 실행에 대해 모든 관련 데이터가 폴더에 저장되는 방식으로 프로그램을 설정하려고합니다.부적절한 system() 호출 사용?
은 내가하는 일은의 PNGs
에서 비디오를 만들 ffmpeg
를 호출 Gnuplot
으로 .dat
파일에서 PNGs
을 생성 .dat
파일을 압축하고 마지막으로 모든 중간 파일을 삭제하여, 청소 WinRAR
을 사용하는 것입니다. 이것은 작업 디렉토리에서 할 때 작동합니다.
이제 새로운 디렉토리를 만들고 거기에 동일한 작업을 시도합니다. 내 코드 :
// Load the proper library to use chdir() function
#ifdef _WIN32
#include <direct.h>
#elif defined __linux__ || defined __APPLE__&&__MACH__
#include <unistd.h>
#endif
// Make output directory and change working directory to new directory
ostringstream dirCommand;
dirCommand << "mkdir " << folderName_str;
system(dirCommand.str().c_str());
const char* test = folderName_str.c_str();
#ifdef _WIN32
if(_chdir(test))
{
printf("Unable to locate the directory: %s\n",test);
return;
}
#elif defined __linux__ || defined __APPLE__&&__MACH__
if(chdir(test))
{
printf("Unable to locate the directory: %s\n",test);
return;
}
#endif
else
printf("Created output directory...\n");
이미이 부분에 대해서는 반대 의견이있을 것으로 알고 있습니다. 나는 광범위하게 보았으며 많은 사람들이 Windows 용으로 SetCurrentDirectory()
을 선호하거나 그들은 system()
을 사용하는 것에 대해 회의적입니다. 내가 할
// Make video
std::cout << "Generating Video..." << endl;
ostringstream command;
command << "ffmpeg -f image2 -r 1/0.1 -i output_%01d.png -vcodec mpeg4 " << videoName_str << ".avi -loglevel quiet";
std::system(command.str().c_str());
// Clean Up!
std::cout << "Cleaning up!" << endl;
ostringstream command2;
#ifdef _WIN32
command2 << "rar -inul a " << videoName_str << ".rar *.dat settings.gp loadfile.gp";
#elif defined __linux__ || defined __APPLE__&&__MACH__
command2 << "tar cf " << videoName_str << ".tar *.dat settings.gp loadfile.gp";
#endif
std::system(command2.str().c_str());
: 나는 FFMpeg
와 비디오를 만들려고 할 때 다음 RAR 내 파일 타르/내 방어에서, 지금 ...
나는 초보 프로그래머이고 나의 지식은 정말 제한된다 Win/Linux에서 매우 다른 동작.
윈도우 7 64, 비주얼 스튜디오 창에서 2010/12
는 폴더가 생성됩니다. .dat
파일이 올바르게 생성되고 gnuplot
은 PNGs
을 그립니다. ffmpeg
이 호출되면 아무 일도 일어나지 않습니다. FFMpeg
또는 기타 오류 메시지가 없습니다. WinRAR
도 마찬가지입니다. 어쩌면, 마지막으로, 무료 인 7z
의 명령 행 유틸리티를 사용할 수 있습니다!
리눅스 민트 14 64, 이상하게도
Qt는 4.8.1는 동작은 윈도우의 반전된다. 디렉토리가 변경되는 즉시 첫 번째 .dat
파일 만 생성됩니다. 마치 파일 생성을 위해 fprintf()
에 대한 모든 후속 호출이 작동하지 않거나 어딘가에서 사라지는 것과 같습니다. Gnuplot
작품과 마찬가지로 ffmpeg
및 tar
!!
나는 정말로 당혹 스럽다. 도움이된다면 정말 감사하겠습니다. 도움이 될 수
필자는 쉘 스크립트를 작성하는 것이 좋을 것이라고 생각합니다. 각 플랫폼마다 별도의 플랫폼이 필요 하겠지만 누가 신경 써야하는지 - 이제는 동일한 조건으로 컴파일됩니다. –
고마워요! 나는 이것에 정말로 사로 잡혔다. 그러나 집에 가져갈 메시지는 실수를 관리하는 방법을 배우는 것입니다. 나는 잘못된 사용자 입력을 더 잘 예측해야한다. – Dima1982