2017-04-13 144 views
0

假设我有一个名为“____.srt”的文件,其中___可以是任何东西。 我试图通过添加'1'来改变它的名字,所以它会看起来像这样的“____1.srt”。使用命令提示符在C中重命名SRT文件

使用CMD argv [1]从参数中读取文件。

void main(int argc,char* argv[]){ 
char* pt; 
pt = strstr(argv[1],".srt\0"); // checks if end of input-string is .srt 
    if(pt == NULL) 
    { 
     fprintf(stdout,"Invalid input.\nInput file must be inputfile.srt\n"); 
     fprintf(stdout,"Program will now exit\n"); 
     return; 
    } 
    strcpy(pt,'1'); 
    strcat(argv[1],".srt"); 

    fprintf(stdout,"%s file was created.\n",argv[1]); } 

这似乎不起作用。有人能够找出问题吗?我会很感激任何帮助。 谢谢

+0

我不知道'c'太多,但是,不应该在'strstr(argv [1],“。srt \ 0”)'前检查'argc'的值。 – dcg

+0

你没有说明“它似乎没有工作”。您正在打印出新的文件名,但实际上并未重命名该文件(或者甚至首先检查它是否存在)。另外,在文字字符串中加入'\ 0'没有意义。 –

+0

@Klitos我正在检查文件是否存在。我没有提到它,因为它不是重点。如果我不把\ 0放在一个字符串中,我还能检查一个字符串是否以“.srt”结尾? – Jadenkun

回答

0

经过几次修改,你的代码看起来像这样,我希望它的工作原理。在你的代码中,你没有正确处理字符串。

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 

int main(int argc,char* argv[]){ 
    char* pt; 
    int flag; 
    pt = strstr(argv[1],".srt\0"); // checks if end of input-string is .srt 
    if(pt == NULL) 
    { 
     fprintf(stdout,"Invalid input.\nInput file must be inputfile.srt\n"); 
     fprintf(stdout,"Program will now exit\n"); 
     return 0; 
    } 

    pt = (char*)malloc(sizeof(argv[1] + 1)); // filename length + number or additional digits 
              // Needed for using strncpy function 
    strncpy(pt, argv[1], strlen(argv[1]) - 4); // copying filename except the .srt extention. 
    strcat(pt, "1.srt"); //using pt for new filename 
    flag = rename(argv[1], pt); 

    if (flag == 0) // rename returns 0 on success 
     fprintf(stdout,"New file name: %s\n", pt); 
    else 
     fprintf(stdout,"An error occurred\n"); 
} 
相关问题