gpt4 book ai didi

c - 如何更改文件的扩展名

转载 作者:行者123 更新时间:2023-11-30 21:06:00 25 4
gpt4 key购买 nike

有类似的问题,但我的问题更具体一些。当我使用 RLE 算法进行编码时,我有一个 C 代码,它接受 file.txt 并返回 file.txt.rle 。我以同样的方式对其进行解码,并希望从 file.txt.rle 写入并返回 file.txt。以下代码是我从 file.txt 转到 file.txt.rle 时使用的代码:

char name[NAME_SIZE];
if(sprintf(name, "%s.rle", argv[1]) >= sizeof(name)){
fprintf(stderr, "Destination file name is too long\n");
}
while((o_fp = fopen(name, "wb")) == NULL){
fprintf(stderr, "Can't create the file to be written\n");
exit(1);
}

如何在解码时将扩展名从 file.txt.rle 更改为 file.txt?完整的代码没有帮助,因为我将在解码编码文件的代码中使用它。

注意:给定的文件将始终采用 .txt.rle 格式,并且返回的文件应始终将其转换为 .txt。

最佳答案

您可以简单地执行此操作:

  • strrchr查找字符串中最后一个句点在哪里,
  • strlen/malloc 分配内存来存储新名称,
  • sprintf创建新名称。
<小时/>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/* this function will create a new name, replacing the existing extension
by the given one.
returned value should be `free()` after usage

/!\ warning:
* validity of parameters is not tested
* return of strdup and malloc are not tested.
*/
char *replace_ext(const char *org, const char *new_ext)
{
char *ext;

/* copy the original file */
char *tmp = strdup(org);

/* find last period in name */
ext = strrchr(tmp , '.');

/* if found, replace period with '\0', thus, we have a shorter string */
if (ext) { *ext = '\0'; }

/* compute the new name size: size of name w/o ext + size of ext + 1
for the final '\0' */
size_t new_size = strlen(tmp) + strlen(new_ext) + 1;

/* allocate memory for new name*/
char *new_name = malloc(new_size);

/* concatenate the two string */
sprintf(new_name, "%s%s", tmp, new_ext);

/* free tmp memory */
free(tmp);

/* return the new name */
return new_name;
}

int main(void)
{
int i;
char *tests[] = { "test.ext", "test.two.ext", "test_no_ext", NULL};

for (i = 0; tests[i]; ++i)
{
char *new_name = replace_ext(tests[i], ".foo");
printf("%s --> %s\n", tests[i], new_name);
free(new_name);
}

return 0;
}

关于c - 如何更改文件的扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51074432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com