初心者の者です。
プログラムでディレクトリ(フォルダ)の作り方をご存知の方教えてください。

fopen("data/○○.dat", "w")で、
dataというディレクトリ(フォルダ)の中に○○.datというファイルを
作ることができるという事は分かったのですが、この方法では
あらかじめdataというディレクトリを作らなければなりません。

プログラムを実行させるときにディレクトリを作り、その中にファイルを
作るにはどのようにすればよいでしょうか?

また、動作環境はWindowsとUNIXの両方で使いたいのですが,
使い分けなければならないのでしょうか?

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

mkdir(path, mode)


という関数が用意されているはずです。
これはUnix/WIndows双方で利用可能なものです。
pathには作成したいディレクトリのフルパスを指定します。
modeはアクセス権限の指定です。
Windowsの場合はVC++のヘルプドキュメントのランタイムライブラリリファレンスを参照すれば載っているはずです。
    • good
    • 0
この回答へのお礼

どうもありがとうございました。
おかげさまで解決することができました。
また分からない事があると思いますので、
その時はまたよろしくお願いします。

お礼日時:2001/05/22 23:01

> また、動作環境はWindowsとUNIXの両方で使いたいのですが,


> 使い分けなければならないのでしょうか?

先に回答された通り mkdir() は、Windows でも unix でも用意はされている
のですが、プロトタイプを宣言しているヘッダファイルが違います。

ソースを共通にするのであれば、定義済みマクロを使います。例えば、

#ifdef unix
#include <sys/stat.h>
#else /* Windows */
#include <direct.h>
#endif

という感じ。たぶん、unix という定義済みマクロは、どの unix でも
通じると思うのですが、一応確認を。また、それぞれのヘッダファイルも
念の為に確認した方が良いと思います。
    • good
    • 0
この回答へのお礼

細やかなアドバイスどうもありがとうございます。
とても参考になりました。
また質問することがあると思いますが、
その時はよろしくお願いします。

お礼日時:2001/05/22 23:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qfopenで別ディレクトリにファイルをオープンしたい

 LinuxでC言語のプログラムを作っています。書き込みでファイルをオープンする際に、別のディレクトリにファイルを作成したいのです。しかし普通にターミナルの上でやるような指定の仕方だとうまくいきません。
 以前にWindows環境でfopenの際のパス指定の質問があったみたいですが、Linuxではどのように指定したらいいでしょう…?よろしくお願いします。

Aベストアンサー

fopenで指定するファイル名は、絶対パス指定と相対パス指定の何れかで行います。
ファイル名を"file"としたとき、
"/aaa/bbb/file"が絶対パス指定です。
相対パス指定は
"file"又は"./file"となります。
これはwindowsの
"c:\\aaa\\bbb\\file"
"file"に相当します。
絶対パス指定で別のディレクトリに"file"を作成したい場合、別のディレクトリが/aaa/bbbであると仮定すると
"/aaa/bbb/file"がfopenで指定するファイル名となります。
相対パス名で指定方法については、現在自分がどこにいるか(どのディレクトリで実行するか)が、問題になります。
絶対パス指定で通常は問題ないので、この方法で行って下さい。どうしても相対パス名で指定したい場合は、その旨補足して下さい。

Qfopenでディレクトリ内の全ファイルを順次開く方法

 UNIX上の/home/info/user/log内にある*.logファイルを一つずつfopenで開いて一行ずつ読み込み、用が済んだらfcloseで閉じていくようなプログラムを作りたいのですが、どうすれば良いのでしょうか?
 最初はls -l /home/info/user/log/*.logをリダイレクトしたファイルリストを作り、それを読み込ませてfopen……という流れを考えていたのですが、対象となるファイルが万単位に登る為実現不可でした。
 一行ずつ読み込ませる部分は既に出来ているので、fopen/fcloseに絞ってお教え下さい。

Aベストアンサー

お書きの方法でも別に万のファイルがあっても実現可能だと思いますが、リダイレクト先の一時ファイルを置く場所が足りないのでしょうか?

普通は、opendirして、
(readdirでディレクトリの内容を読み出してファイル名を調べfopen→処理→fclose) を繰り返します。

Q1,1,2,3,5,8,13の合計

初心者ですみませんが、1,1,2,3,5,8,13の合計を出すプログラミングがどうしてもわかりません。どなたかご教示頂けましたら助かります。
宜しくお願いいたします。

Aベストアンサー

#include <stdio.h>

int main(void)
{
   printf("%d\n", 1+1+2+3+5+8+13);
}

Qfopen用の関数を作りたいです。

#include<stdio.h>
void F_open(FILE *fp);
main(){
FILE *fp;
F_open(fp);
fprintf(fp,"aaa\n");
}
void F_open(FILE *fp){
fp=fopen("aa.txt","w");
}

とすると、ファイルオープンはできるのですが
>fprintf(fp,"aaa\n");
で書き込もうとしたときにエラーになってしまいます。
解決策を教えていただきたいです。

Aベストアンサー

あーそれは、
----
main(){
FILE *fp;
F_open(fp);
fprintf(fp,"aaa\n");
}
-----
の「fp」と、
-----
void F_open(FILE *fp){
fp=fopen("aa.txt","w");
}
-----
の「fp」がつながってないからです。
「F_openからmainにファイルポインタを渡す」必要があるのに、このプログラムでは、
「mainからF_openにファイルポインタを渡す」ことをしています。

対処策は、全部教えることになってしまいますが、

#include<stdio.h>
FILE * F_open(void);
main(){
FILE *fp;
fp = F_open(fp);
fprintf(fp,"aaa\n");
}
FILE * F_open(void){
return fopen("aa.txt","w");
}

とすれば動くはずです。

しかしそれよりも、ここで
F_open()関数を導入する意味はなく、
fopen関数をそのまま使った方が簡単だと思いますが?
(このあと機能を付け加えるというのならまた別です)

あーそれは、
----
main(){
FILE *fp;
F_open(fp);
fprintf(fp,"aaa\n");
}
-----
の「fp」と、
-----
void F_open(FILE *fp){
fp=fopen("aa.txt","w");
}
-----
の「fp」がつながってないからです。
「F_openからmainにファイルポインタを渡す」必要があるのに、このプログラムでは、
「mainからF_openにファイルポインタを渡す」ことをしています。

対処策は、全部教えることになってしまいますが、

#include<stdio.h>
FILE * F_open(void);
main(){
FILE *fp;
fp = F_open(fp);
fpr...続きを読む

Qプログラムを作る技術を持たない人からプログラムの依頼を受ける場合の注意点

VC++でGUI(グラフィカルユーザインターフェース)を開発しています。
今までの経験でも、もちろん、プログラム開発の依頼は必ずしもプログラムを作る技術を持っている人ばかりとう訳ではありませんでした。
けれども今まで私にプログラム開発を依頼して下さった方々は、大抵、プログラムを使っている方々と私達プログラムを作る技術者の間にたって、仲介をして下さっていた方々だったのです。
現在、その存在がどれほどありがたい存在だったのか、骨身に染みています。

Aベストアンサー

「外部仕様」を具体的に決め、それを漏れなく示した外部仕様書に「これでOKです」という検印をいただくことです。これにつきます。
 何を入れたら何が出て来るシステムを欲しているのかを文書化することです。
 具体的な部分では画面の操作仕様、ユーザがその内容構造を意識する入出力ファイル仕様などです。
 データベースのテーブル構成や各テーブルの構造は正規化の結果なので詳しくは不要でしょうが、俗に「○○マスター」と称するような各種管理テーブルはエンドユーザが「何をキーに何を一元管理しているのか」に関わるので十分な理解と確認が必要です。
 ここまでは「あたりまえ品質」を確実に提供するためですね。

 で、システムがシステムとして動作するためという側面で特に注意すべきはエラー仕様です。画面操作や入力ファイルで指定できる値の範囲。それを超えて指定した場合のエラー時の動作。
 何らかのソフトウェア障害やハードウェア障害が有った場合の動作仕様。リカバリー方法。この辺はトランザクション単位(←データベースのトランザクションと言う意味だけではなく、エンドユーザの操作仕様や業務仕様という視点でのより広義な意味で)。etc.etc.
 人間系を含めたシステムの動作全体が異常時もきちんと完結し、業務再開後に処理中だったものの再実行が容易に出来るか、、、つまりデータの取りこぼしが無いかといったところを中心に詰めることです。

 システム開発の組織構成で、発注元からプログラム開発者の間にエンドユーザの言葉と開発者の言葉の両方を理解する者、つまり必要なスキルを持ったSEが居ない場合、エンドユーザが開発者に短時間で近づくのは無理ですから逆をやるしかありません。
 開発者のこれまで経験(力のあるSEの下でどういう経験をして来たか)が問われる力の出し所です。システム開発の上流工程を奪い取るまたは、その分野に食い込むチャンスと考えしっかり進めて下さい。

参考まで。

「外部仕様」を具体的に決め、それを漏れなく示した外部仕様書に「これでOKです」という検印をいただくことです。これにつきます。
 何を入れたら何が出て来るシステムを欲しているのかを文書化することです。
 具体的な部分では画面の操作仕様、ユーザがその内容構造を意識する入出力ファイル仕様などです。
 データベースのテーブル構成や各テーブルの構造は正規化の結果なので詳しくは不要でしょうが、俗に「○○マスター」と称するような各種管理テーブルはエンドユーザが「何をキーに何を一元管理している...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報