ページ 11

譜面データを読むときに

Posted: 2010年5月31日(月) 22:21
by act
このサイトの太鼓の鉄人を参考にしながら太鼓の達人もどきを作ろうとしているのですが、譜面を追加するときに一曲ごとにフォルダを作ってその中に譜面のデータなどをいれるようにしたいのですが、このようにすると譜面のデータを読むときにどのようにパスを指定すればいいのかがわからないのですが、どうすれば上手くいくでしょうか。 画像

Re:譜面データを読むときに

Posted: 2010年5月31日(月) 22:39
by ookami
"フォルダ/ファイル名"のように、"/"などで区切る、ということではなくてですか?

Re:譜面データを読むときに

Posted: 2010年5月31日(月) 23:01
by act
日本語おかしくてすいません。自分でもなんて言っていいかわからなくて…
曲ごとのフォルダの名前はプログラムを作った後に決めるわけじゃないですか、となるとそのフォルダの中のファイルにアクセスしたいときにどうすればアクセスできるかがわからなくて困っています。

Re:譜面データを読むときに

Posted: 2010年5月31日(月) 23:13
by ookami
むむむ... さっぱり分かりませんが、こういうことかな?
sprintf(fullpath,"%s/%s",folder,filename);

とりあえず、参考にされたページのURLと、作りかけのソースを貼ってみましょうか。

Re:譜面データを読むときに

Posted: 2010年5月31日(月) 23:24
by act
えーと、まだ頭の中で考えているだけでソースは書いていません(汗)
stepmaniaって言うゲームがあるじゃないですか。あれのように曲を追加できるようにしたいのですが、プログラムを作る段階ではどのようなフォルダ名になるかがわかりませんよね?なのでfopenで譜面を読むにしてもパスがわからず、開けないじゃないですか。この時どうすれば開けるかが知りたいのですが…

Re:譜面データを読むときに

Posted: 2010年5月31日(月) 23:31
by ookami
フォルダ内のファイルを検索して処理するということでしょうか?

WIN32_FIND_DATA fd;
HANDLE hFind;
hFind = FindFirstFile(pattern,&fd);
if(hFind==(HANDLE)-1) return;
do{
printf(fd.cFileName);
}while(FindNextFile(hFind,&fd));
FindClose(hFind);

Re:譜面データを読むときに

Posted: 2010年5月31日(月) 23:35
by Dixq (管理人)
そんな時は「FindFirstFile」でググってみるといいですよ。
http://www.google.co.jp/search?hl=ja&q= ... lr=lang_ja

リンク先を見ればフォルダ内のファイルのリストアップの仕方が書いてあります。

Re:譜面データを読むときに

Posted: 2010年5月31日(月) 23:35
by Dixq (管理人)
う、のんびり書いてたら被ってしまいました、すみません;

Re:譜面データを読むときに

Posted: 2010年5月31日(月) 23:51
by act
win32という単語が出てくると言うことはwin32APIを使うということですよね。
私はwin32APIを勉強してきてないのですがこの処理をしたいとなるとやはり勉強してこなくてはいけないですよね…
Cの標準関数でなんとかならないものでしょうか?

Re:譜面データを読むときに

Posted: 2010年5月31日(月) 23:59
by Dixq (管理人)
そんなに抵抗すること無いと思いますが、どうでしょう?

ookamiさんのプログラムどこか解らないでしょうか?
解りやすく書かれていると思いますが。

fd.cFileNameがファイル名です。
ファイルが見つかる限りクルクルループを周ります。
後ろの3文字を見れば欲しいファイルかどうかがわかるでしょう。

私の書いたリンク先にあるプログラムを見ればif文ひとつでフォルダかどうか判断する方法も書いてあります。

Cの標準関数にはフォルダ内のフォルダやファイルを列挙する関数はありません。

Re:譜面データを読むときに

Posted: 2010年6月01日(火) 00:26
by Libra
以前(1年半くらい前?)
この掲示板に提示されたソースなら持ってます
#include <stdio.h>
#include <dirent.h>

int main(void)
{

        struct dirent* f;

        DIR* fd;

        fd = opendir(".");

        if (fd == NULL) {

            printf("open dir error\n");

            return 0;

        }

        while (f = readdir(fd)) {

            printf("%s\n", f->d_name);

        }

        closedir(fd);

        return 0;
}
WinAPI無しの方法ですね。 画像

Re:譜面データを読むときに

Posted: 2010年6月01日(火) 01:07
by act
了解しました。
この方法を使えばなんとかなりそうなので少し勉強してきます。
夜遅くにどうもありがとうございました。