Your fopen
-ing code is good, but running in conditions (e.g. in some weird working directory, or without sufficient permissions) which make the fopen
fail.
I recommend to use errno
(perhaps implicitly thru perror
) in that failure case to get an idea of the failure reason:
FILE *myfile = fopen("a.k", "r");
if (!myfile) {
perror("fopen of a.k");
exit(EXIT_FAILURE);
}
See e.g. fopen(3), perror(3), errno(3) (or their documentation for your particular implementation and system).
Notice that file extensions don't really exist in standard C++11 (but C++17 has filesystem). On Linux and POSIX systems, file extensions are just a convention.
Can someone show me the way to open *.k files in C++.
If you need to open all files with a .k
extension, you may rely on globbing (on POSIX, run something like yourprog *.k
in your shell, which will expand the *.k
into a sequence of file names ending with .k
before running your program, whose main
would get an array of arguments; see glob(7)), or you have to loop explicitly using operating system primitives or functions (perhaps with glob(3), nftw(3), opendir(3), readdir(3), ... on Linux; for Windows, read about FindFirstFile etc...)
Standard C++11 don't provide a way to iterate on all files matching a given pattern. Some framework libraries (Boost, Poco, Qt) do provide such a way. Or you need to use operating system specific functions (e.g. to read the current directory. But directories are not known to C++11 and are an abstraction provided by your operating system). But C++17 has filesystem, but you need a very recent compiler and C++ standard library to get that.
BTW, on Unix or POSIX systems, you could have one single file named *.k
. Of course that is very poor taste and should be avoided (but you might run touch '*.k'
in your shell to make such a file).
Regarding your edit, for Linux, I recommend running
./myprogram *.k
(then your shell will expand *.k
into one or several arguments to myprogram
)
and code the main
of your program myprog
appropriately to iterate on arguments. See this.
If you want to run just myprogram
without any additional arguments, you need to code the globbing or the expansion inside it. See glob(3), wordexp(3). Or scan directories (with opendir(3), readdir(3), closedir
, stat(2) or nftw(3))