例如,我有一些文件名数组:
char arr[N] = ["FILENAME0", "FILENAME1", "FILENAME2", "FILENAME3", "FILENAME4", ...]
如何编写依赖于N
fopen
和fclose
N
个文件的函数?
switch-case
和if-elif-else
很简单,但需要很多条件且N
已经知道(N
将在运行时从stdin传递)。
For-loop
不适用于此,因为它会逐步打开和关闭。我希望在开头,函数将fopen
N
个文件,然后所有这些N
文件描述符应该在内存中可用,然后才关闭N
个文件。
我希望N == 1
函数的行为如下:
int func ()
{
FILE *fp = fopen(arr[0]);
fclose(fp);
return 0;
}
或N == 3
:
int func ()
{
FILE *fp = fopen(arr[0]);
FILE *fp1 = fopen(arr[1]);
FILE *fp2 = fopen(arr[2]);
fclose(fp);
fclose(fp1);
fclose(fp2);
return 0;
}
答案 0 :(得分:1)
只需将scope :all_but_first, -> { order(created_at: :desc)[1..-1] }
存储到FILE*
中,然后使用第二个循环关闭它们:
std::vector
如果您在打开文件和关闭文件之间执行任何可能引发异常的操作,那么您可能希望使用异常安全的包装器,而不是手动关闭void func(const std::vector<std::string>>& filenames) {
std::vector<FILE*> fds;
for (const std::string& filename : filenames) {
fds.push_back(std::fopen(filename.c_str(), "w"));
}
// Work with the file descriptors however you want
for (FILE* fd : fds) {
std::fclose(fd);
}
}
:
FILE*
答案 1 :(得分:0)
AFAIK,FILE *fp = fopen(arr[0]);
上没有可能的缩短C++
等解决方案。您无法使用if-elif-else
子句打开文件并关闭它。