【C言語】読み込むファイルの場所はどのフォルダ?

この記事では、C言語でファイルを読み込む際に、ファイルの場所を指定する方法とカレントディレクトリの指定方法について解説します。

絶対パスと相対パスの使い方や、カレントディレクトリの取得と変更の方法を学ぶことができます。

初心者の方にもわかりやすく、C言語でファイルを扱う際の基礎知識を身につけましょう。

目次から探す

基準となるフォルダ

C言語において、ファイルを読み込む際には、ファイルのパスを指定する必要がありますが、基準となるフォルダは、プログラムが実行される場所によって異なります。

一般的には、プログラムが格納されているフォルダが基準となります。

例えば、プログラムが C:\Programs\sample\ というフォルダに格納されている場合、このフォルダが基準となります。

そのため、 C:\Programs\sample\にあるプログラムで、dir\sample.txtを読み込もうとした場合、C:\Programs\sample\dir\sample.txtを読み込むことになります。

基準となるフォルダは、C言語の標準ライブラリであるstdio.hに含まれるgetcwd関数を使用することで取得できます。

getcwd関数は、現在の作業ディレクトリ(基準となるフォルダ)のパスを取得するための関数です。

以下に、基準となるフォルダを取得するサンプルコードを示します。

#include <stdio.h>
#include <unistd.h>
int main() {
    char currentDir[256];
    if (getcwd(currentDir, sizeof(currentDir)) != NULL) {
        printf("基準となるフォルダ: %s\n", currentDir);
    } else {
        perror("getcwd() error");
        return 1;
    }
    return 0;
}

このサンプルコードでは、getcwd関数を使用して基準となるフォルダを取得し、その結果を表示しています。

基準となるフォルダは、currentDirという文字列配列に格納され、printf関数を使用して表示されます。

実行結果は、以下のようになります。

基準となるフォルダ: C:\Programs\sample\

このように、getcwd関数を使用することで、基準となるフォルダを取得することができます。

プログラムが実行される環境によって基準となるフォルダが異なるため、注意が必要です。

ファイルの場所の指定方法

C言語でファイルを読み込む際には、ファイルの場所を指定する必要があります。

ファイルの場所を指定する方法には、絶対パスと相対パスの2つがあります。

絶対パスの指定方法

絶対パスとは、ファイルが格納されているディレクトリのルートからのパスのことです。

絶対パスを指定することで、どのディレクトリにいても正確にファイルの場所を指定することができます。

例えば、Windowsの場合、絶対パスは以下のような形式になります。

"C:\\Users\\username\\Documents\\file.txt"

LinuxやMacの場合は、以下のような形式になります。

"/home/username/Documents/file.txt"

相対パスの指定方法

相対パスとは、現在の作業ディレクトリを基準にしたパスのことです。

相対パスを指定することで、現在のディレクトリからの相対的な位置を指定することができます。

相対パスには、以下のような表記方法があります。

  • . : 現在のディレクトリを表します。
  • .. : 現在のディレクトリの親ディレクトリを表します。
  • ディレクトリ名 : 現在のディレクトリからの相対的な位置にあるディレクトリを表します。

例えば、現在のディレクトリが/home/username/Documentsである場合、以下のような相対パスが指定できます。

  • ./file.txt : 現在のディレクトリにあるfile.txtを指定します。
  • ../file.txt : 現在のディレクトリの親ディレクトリusernameにあるfile.txtを指定します。
  • ../Pictures/file.txt : 現在のディレクトリの親ディレクトリusernamePicturesディレクトリにあるfile.txtを指定します。

カレントディレクトリの指定方法

カレントディレクトリを変更するには、chdir関数を使用します。

この関数は、以下のように使用します。

#include <unistd.h>
int chdir(const char *path);

pathには移動したいディレクトリのパスを指定します。

移動に成功した場合は0を返します。

以下に、カレントディレクトリの取得と変更の例を示します。

#include <stdio.h>
#include <unistd.h>
int main() {
    char buf[256];
    // カレントディレクトリの取得
    if (getcwd(buf, sizeof(buf)) != NULL) {
        printf("カレントディレクトリ: %s\n", buf);
    } else {
        perror("getcwd");
        return 1;
    }
    // カレントディレクトリの変更
    if (chdir("/home/username/Documents") == 0) {
        printf("カレントディレクトリを変更しました。\n");
    } else {
        perror("chdir");
        return 1;
    }
    return 0;
}

このプログラムを実行すると、現在のカレントディレクトリが表示され、その後にカレントディレクトリが変更されるメッセージが表示されます。

以上が、C言語でファイルの場所を指定する方法とカレントディレクトリの指定方法の解説です。

絶対パスと相対パスの使い分けや、カレントディレクトリの取得と変更の方法を理解して、ファイルの読み込みに活用してください。

目次から探す