譜面データを読むときに

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
act

譜面データを読むときに

#1

投稿記事 by act » 15年前

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

ookami

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

#2

投稿記事 by ookami » 15年前

"フォルダ/ファイル名"のように、"/"などで区切る、ということではなくてですか?

act

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

#3

投稿記事 by act » 15年前

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

ookami

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

#4

投稿記事 by ookami » 15年前

むむむ... さっぱり分かりませんが、こういうことかな?
sprintf(fullpath,"%s/%s",folder,filename);

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

act

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

#5

投稿記事 by act » 15年前

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

ookami

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

#6

投稿記事 by ookami » 15年前

フォルダ内のファイルを検索して処理するということでしょうか?

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);

Dixq (管理人)

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

#7

投稿記事 by Dixq (管理人) » 15年前

そんな時は「FindFirstFile」でググってみるといいですよ。
http://www.google.co.jp/search?hl=ja&q= ... lr=lang_ja

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

Dixq (管理人)

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

#8

投稿記事 by Dixq (管理人) » 15年前

う、のんびり書いてたら被ってしまいました、すみません;

act

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

#9

投稿記事 by act » 15年前

win32という単語が出てくると言うことはwin32APIを使うということですよね。
私はwin32APIを勉強してきてないのですがこの処理をしたいとなるとやはり勉強してこなくてはいけないですよね…
Cの標準関数でなんとかならないものでしょうか?

Dixq (管理人)

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

#10

投稿記事 by Dixq (管理人) » 15年前

そんなに抵抗すること無いと思いますが、どうでしょう?

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

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

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

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

Libra

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

#11

投稿記事 by Libra » 15年前

以前(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無しの方法ですね。 画像

act

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

#12

投稿記事 by act » 15年前

了解しました。
この方法を使えばなんとかなりそうなので少し勉強してきます。
夜遅くにどうもありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る