2015-12-02 73 views
-6

今天过得如何。我有一个关于文件名处理的问题:D。我的代码不想工作,它给我虚假分割如何为C中的每个文件创建一个唯一的名称?

的想法是让唯一的文件名,它如果的同名文件已经存在创建。首先是没有文件的例外,所以for循环从1开始,而不是从0开始。

unistd.h is required!

char fileName[15][100]; 
sprintf(fileName[0],"output.txt"); 
FILE *output; 

    for(int i = 1 ;i < 100; i++){ 
     sprintf(fileName[i],"Output%d.txt",i+1); 

     //File exists 
     if(!access(fileName[i],F_OK)) 
     { 
      //Create and open a file 
      output = fopen(fileName[i], "w"); 
      break; 
     }  
    } 

我只是需要做一个尝试的功能(如一段时间),直到它找到它不采取名字。我只是把那里的for循环限制到100.

+1

那么你的问题是什么? – owacoder

+1

*“如果**具有相同名称的文件已存在,则创建**”。*如果该名称的文件已存在,则它不是唯一的。 –

+0

你真的需要阅读指针。 '&文件名[I]'?你不断用新的东西覆盖你的'fileName'字符串的一部分。 'fileName是一个字符串,而不是一个字符串数组。 'fileName [i]'没有意义 –

回答

0

你没有为指向数组的指针分配任何内存。此外,你的语法在这里和那里都有点儿偏差。这个简单的例子展示了如何为一个字符串数组分配内存,分配一些值,打印它们并释放内存。

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

#define MAXNAMES 10 
#define MAXLEN 32 

int main(void) 
{ 
    char* fileName[MAXNAMES]; 
    int i; 

    for(i=0; i<MAXNAMES; i++) 
     if ((fileName[i] = malloc(MAXLEN)) == NULL) 
      exit(1); 

    sprintf(fileName[0],"Output.txt");  // your first name is an exception  
    for(i = 1; i<MAXNAMES; i++)   // the rest of the names 
     sprintf(fileName[i], "Output%d.txt", i+1); // using your offset of 1 

    for(i = 0; i<MAXNAMES; i++) 
     printf("%s\n", fileName[i]); 

    for(i = 0; i<MAXNAMES; i++) 
     free(fileName[i]); 

    return 0; 
} 

程序输出:

Output.txt 
Output2.txt 
Output3.txt 
Output4.txt 
Output5.txt 
Output6.txt 
Output7.txt 
Output8.txt 
Output9.txt 
Output10.txt 
+0

等你一气呵成吗?我对吗?我只需要一个try函数(如while),直到找到未被采用的名称。我只是把那里的for循环限制到100. –

+0

@RandomNoob这是一个简单的例子,向你展示如何使用字符串数组。它并不是要实现你的确切问题,因为我没有你正在使用的库函数。 –

+0

那么最有趣的一点是,我有一个半年前写的代码片段,我只是不能改变它 –

1

你要的malloc内存中的字符串。

例如

char** fileName; 
int Number_Of_Strings, String_Length, i; 
fileName = malloc(Number_Of_Strings * sizeof(char*)); 

for (i = 0; i < Number_Of_String; i++) // For each string 
    fileName = malloc(String_Length * sizeof(char)); 

Number_If_Strings:有多少串,你需要什么? STRING_LENGTH:每串

+0

谢谢,但我不想分配任何东西..我已经在程序中分配了几乎所有的变量,所以我想让它保持静态。感谢您的建议 –

1

的长度你在这里什么:

char* fileName[100]; 

...是100个字符指针数组。但是,你并没有为实际的字符串本身腾出空间。

当你这样做:

sprintf(&fileName[0],"output.txt"); 

...你写的“output.txt中”的位置在文件名[0]的地址,最有可能为0x0或者根据一些随机值,指出你的编译器以及是否在堆栈或堆上分配数组等。这通常会导致分段违例,并且程序终止。

+0

谢谢。没有注意错误的代码复制! –

相关问题