【问题标题】:Why is this C program filling drive C:\?为什么这个 C 程序填充驱动器 C:\?
【发布时间】:2019-09-29 00:54:00
【问题描述】:

下面的代码是一个压缩了一些的 C 程序。他们正在共享文件夹,有些大约有 6G。但是C:/盘现在只有4G空闲了,而且每次脚本运行都会加载,相信是临时文件的原因。

但是我已经把Winrar中临时文件的文件夹改成了选项>设置>路径>临时文件的文件夹:“E:\temp”。

会发生什么?看,代码基本是这样的(一些sn-ps,这里改个目录就可以压缩,去掉就可以总结了):

#include <iostream>
#include <ctime>
#include <stdio.h>
#include <string.h>
#include <cstdlib>

using namespace std;

int main(){

    char comando [150]={""};

    char ano [3];
    char mes [3];
    char dia[3];
    char data[15] ={""};
    char pasta[15] = {""};
    char *Pont_Pasta = pasta;

    unsigned long tempo_Espera = 100000;

    time_t t = time(0);
    struct tm * now = localtime (& t);
    sprintf(ano,"%i",now->tm_year+1900);
    sprintf(mes,"%i",now->tm_mon+1);
    sprintf(dia,"%i",now->tm_mday);

    strcat(data,"_");
    strcat(data,ano);
    strcat(data,"_");
    strcat(data,mes);
    strcat(data,"_");
    strcat(data,dia);

 strcat(comando,"start c:\\arquiv~1\\winrar\\rar a E:\\backup\\aquisicao\\aquisicao");strcat(comando,data);strcat(comando,".rar E:\\aquisicao");
    system(comando);
    strcpy(comando,"");
    _sleep(tempo_Espera);

 (...)

 return 0;    
}

@phuclv 我没有创建此代码,但我知道 strcp 用于清除字符串命令。至于日期线,我是这样写的:

time_t rawtime;
struct tm * timeinfo;
char data[30];

time (&rawtime);
timeinfo = localtime(&rawtime);

strftime(data,30,"_%Y%m%d",timeinfo);

【问题讨论】:

  • 这是题外话。无论如何,您的代码有很多多余的strcpys。做sprintf(data, "%d_%d_%d", now-&gt;tm_year+1900, now-&gt;tm_mon+1, now-&gt;tm_mday);不应该更容易更快吗?那strcpy(comando,"");有什么意义呢?

标签: compression c winrar


【解决方案1】:

C 程序调用的命令行RAR.EXE 不使用WinRAR.EXE GUI 程序中的temp-files 设置。
您需要使用命令行参数为 RAR.EXE 指定临时文件夹。
我没有可用的 WinRAR 副本,但 RAR -hRAR -? 应该会为您提供要使用的参数的信息。

【讨论】:

  • rar.exe v5.71 的任何选项似乎都没有更改临时压缩目录。这个link 告诉如何更改用户的临时目录。在家里进行计算机测试时,我没有注意到我的用户的 tmp 文件夹在压缩过程中增加了。在脚本执行期间增加 C:\ 的可能不是压缩过程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
相关资源
最近更新 更多