在文件夹中查找特定文件并进行编辑

时间:2016-12-05 17:35:14

标签: c

我是C的新手,所以也许这个问题太容易或不相关了。但我没有找到这个问题的答案。

我的文件夹名为:-90.txt,-89.txt,...,0.txt,1.txt,2.txt,...,90.txt。

我需要一些函数来接收数字(文件夹名称)作为参数并打开该文件。

function editFile(number){
    fp=fopen("/data/" + number + ".txt", "wr");

    ...
    // do some other things
}

4 个答案:

答案 0 :(得分:2)

在C中,您无法灵活地为字符串添加数字。如果要将数字附加到字符串,则首先必须使用itoa函数将其转换为字符串。您可以找到有关该功能的在线文档。

以下是概述如何在C

中为字符串添加数字
  • 首先使用char[]sprintf
  • 将数字转换为字符串(将其存储在itoa类型的新缓冲区中)
  • 然后创建一个char[]类型的新缓冲区。确保创建足够大小的文件,以便它可以保存完整的文件路径。
  • 然后使用strcat附加两个字符串。

您可以使用sprintf

,而不是上述所有过程
  • 然后您可以将结果传递给fopen

答案 1 :(得分:1)

/** * @var EnvironmentConfig * @ORM\OneToOne(targetEntity="Environment\Entity\EnvironmentConfig", inversedBy="environment", cascade={"persist"}) */ protected $config; 没有串联概念的字符串。因此,如果你想连接字符串,你必须使用这样的函数:

C

您可以利用function editFile(char* number) { char pathName[MAX_PATH]; strcpy(pathName, "/data/"); strcat(pathName, number); strcat(pathName, ".txt"); fp=fopen(pathName, "wr"); ... // do some other things } 缩短时间。但是您应该添加安全检查,因为您有缓冲区溢出的风险。提示:sprintfstrcpy_sstrccat_s。 (但这超出了你的问题的答案。)

答案 2 :(得分:1)

在C语言中,你无法以这种方式构建字符串。使用sprintf在本地变量中创建文件名。

char filename[1024];
sprintf(filename, "/data/%d.txt", number); // assume that a signed value comes from `int`
fp = fopen(filename, "w+");                // replaced "wr"

答案 3 :(得分:1)

您可能习惯于高级语言,您可以通过连接整数,浮点数,其他字符串等来“构建”字符串。这在C中不起作用。

正如评论@WeatherVane所指出的那样,sprintf功能是适合这项工作的工具:

char buffer[PATH_MAX]; // assuming POSIX
sprintf(buffer, "/data/%d.txt", number);
fp = fopen(buffer, "wr");