続C言語教室 - 第17回 ファイル操作(1) ファイル名
C言語からファイルを開いて読んだり書いたりする方法について、いくつか取り上げましたが、ファイルというのはファイル名という名前が付いていて、それを使ってファイルを作ったり開いたりするところまででした。
今回から、そのファイルの名前がどうなっているのか、ファイルというのがディレクトリという場所にしまわれているなんていう「ファイルシステム」と、その操作について調べてみます。
ファイルには名前をつけることが出来ます。ファイル名に使える文字の種類はファイルシステムによって異なるのですが、大文字小文字のアルファベットとアラビア数字はどのファイルシステムでもOKです。ただしアルファベットの大文字と小文字が区別されるか否かはケースバイケースです。
ファイルの名前には基本となる部分とピリオドに続くファイルの種類を表す拡張子という部分に分かれますが、ファイルの名前としては単にひと繋がりの文字列に過ぎません。移植性を考える場合はファイル名は小文字のアルファベットと数字のみから選び、長さも基本部分を8文字以内、拡張子は3文字以内にしておくのが無難です。
記号については許容されている記号の種類はファイルシステムによって微妙に異なります。プログラムから利用する場合は利用可能であってもシェルからファイル名を指定する場合には注意が必要で、シェルが特別扱いするようなアスタリスク(*)などをファイル名(の一部)として使う場合には記号文字をエスケープしないとアクセスできないファイル名となってしまいます。実は殆どの場合は使えるのですが空白文字を含ませるのも避けるのが無難です。また名前の最大の長さについてもマチマチですし、ASCII以外の文字の取り扱いもケースバイケースです。
ファイル名の規則はC言語ではなくファイルシステムの範疇なので、細かな規則はそちらを取り上げた時にでも触れることにしますが、C言語ならではの注意点として文字列リテラルにダブルクオート(”)を含む場合はバックスラッシュに依るエスケープ記法を用い(\”)と表現する必要があり、バックスラッシュ自身を使うときには同じように(\\)と2つ書く必要があります。マイクロソフトのネットワークドライブ表記が元々(\\)で始まるものなので、C言語から扱うときは(\\\\)となってしまうのでちょっと嫌になってしまうのはご存知のとおりです。またC言語の文字列の制約でファイル名にNULL文字(\0)を含ませることはできません。
stdio.h で定義されているファイル名を扱うライブラリ関数としては、既に取り上げた fopen() 以外に、ファイルを削除する remove() とファイル名を変更する rename() があります。
ここで指定するファイル名はパスと表現されることもあり、これは指定する文字列としてファイル名だけではなく、ディレクトリを指定する文字列も含まれることを意味しています。次回は、このディレクトリについて調べてみます。
ヘッダ画像は、AIで生成しました。
#プログラミング #C言語 #プログラミング講座 #C言語教室 #ファイル名 #ファイルシステム #記号 #fopen #remove #rename