【问题标题】:C name a file the dateC 以日期命名文件
【发布时间】:2021-01-22 09:27:54
【问题描述】:

首先:我知道,以前也出现过一些类似的问题,但它对我不起作用。

我需要在 C 中创建一个名为 "year/month/day_hour 的 .txt 文件em> :分钟

我的代码是:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main(){
int hours, minutes, seconds, day, month, year;
char fileSpec [255];
//TIME for file name
    time_t now;
    time(&now);
    printf("Today is : %s", ctime(&now));
    struct tm *local = localtime(&now);
 
    hours = local->tm_hour;          
    minutes = local->tm_min;         
    seconds = local->tm_sec;         
 
    day = local->tm_mday;            
    month = local->tm_mon + 1;       
    year = local->tm_year + 1900;   
      
    //Time block end

    //create file
    FILE * fPointer;
    snprintf( fileSpec, "%04d_%02d_%02d_%02d:%02d.txt",year,month,day,hours,minutes); //From another post. I do not exactly know the syntax
    fPointer = fopen(fileSpec,"w");
    fprintf(fPointer ,"Date and Time of creation: %d/%d/%d %d:%d:%d\n",day,month,year,hours,minutes,seconds);
}

对不起我奇怪的格式:/

我还是个初学者。

编辑:整个代码是:https://pastebin.com/78fSRJgx

【问题讨论】:

  • 您应该说明您的实际问题是什么。但我猜它源于在文件名中使用 / 。这不起作用,因为它可以分隔目录。
  • 你需要fclose(fPointer);

标签: c fopen


【解决方案1】:

调用 snprintf 的第二个参数应该是 max。缓冲区大小,你没有给出那个论点。更换

snprintf( fileSpec, "%04d_%02d_%02d_%02d:%02d.txt",year,month,day,hours,minutes);

snprintf( fileSpec, 255, "%04d_%02d_%02d_%02d:%02d.txt",year,month,day,hours,minutes);

(其中 255 是 snprintf 将写入的字符串的最大长度)似乎应该可以解决您的问题。

【讨论】:

    【解决方案2】:

    我曾经在 Android 上遇到过类似的问题,我花了几个小时试图找出问题所在。原来是我的问题。

    问题是您不能使用“/”符号作为文件名,因为在文件系统中它被称为目录分隔符。因此,文件系统可能会卡住,或者可能永远找不到名称中包含“/”的文件。

    对此的综合答案是this

    【讨论】:

    • 你尝试了什么?我想说你的文件名中不能有符号“/”。也许用下划线_或可以使用的东西替换它
    • 我确实用_替换了它,但还是不行。最新版本在 pastebin 中
    • 你在用windows吗?
    • 如果是,请遵循post & answer的建议
    • 没有帮助-_-。我认为,还有其他错误,但我无法识别它们
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 2020-08-05
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多