トップページ > 記事閲覧
FileRead_findFirstのアーカイブ時の挙動
名前:8127 日時: 2018/01/26 23:25

いつもお世話になっております。 FileRead_findFirst関数でワイルドカードを指定した場合についての挙動の報告です。 フォルダaの中に1.txtと1.txtOLDファイルがあるときに、 FileRead_findFirst("a\\*.txt")を呼ぶと、1.txtのみが検索にかかります。 しかし、aをDXアーカイブ(a.dxa)にすると両方のファイルが検索に引っかかってしまいました。 (本来は短い再現コードを示すのが筋ですが、ゲーム制作が大詰めで忙しく余裕がありません。) 何か心当たりはありませんでしょうか。 また別件で申し訳ないですが、有料で同人ゲームを販売する際に.mp3ファイルは使えますか? 最近権利が切れたと聞きましたがggってもよく分かりません・・・ 環境はwindows7, VS2017最新版, Dxlib3.19です。 よろしくお願いいたします。
メンテ

Page: 1 |

Re: FileRead_findFirstのアーカイブ時の挙動 ( No.1 )
名前:管理人 日時:2018/01/27 01:02

ご報告ありがとうございます すみません、ワイルドカードの処理のバグです 修正版をアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.exe // Android版 x86用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース ( 中身を既存のライブラリのファイルに上書きして、VisualStudioをお使いの場合は『リビルド』を、  BCCをお使いの場合は『再構築』をして下さい ) > また別件で申し訳ないですが、有料で同人ゲームを販売する際に.mp3ファイルは使えますか? > 最近権利が切れたと聞きましたがggってもよく分かりません・・・ はい、DXライブラリは各PCにインストールされているコーデックの力を借りて mp3 を再生しているので 権利が切れる前でも問題ありません ただ、各PCにインストールされているコーデックの力を借りている関係で、PCにインストールされている コーデックとDXライブラリの相性によっては正常に再生できなかったりするので、DXライブラリの中に デコード用のライブラリを含めている ogg形式や opus形式を使用されることをお勧めします ( 圧縮率も mp3 と同等( ogg形式 )や、それ以上( opus形式 )です )
メンテ
Re: FileRead_findFirstのアーカイブ時の挙動 ( No.2 )
名前:8127(解決) 日時:2018/01/27 01:23

管理人様 対応速すぎです(笑) ゲームをリリースしようとしてアーカイブ圧縮したら突然動かなくなったので焦っていました。 音声ですが、できればoggがいいのは知っていますが素材サイト様の大量の素材を全部変換するのは 骨が折れるのでmp3のままで使わせていただきます。 これからもどうぞよろしくお願いいたします。
メンテ
Re: FileRead_findFirstのアーカイブ時の挙動 ( No.3 )
名前:8127 日時:2018/01/27 01:58

すみません、前とほぼ同じようなバグがまだあるのですが、 data\script\1000,タイトル.scriというファイルを用意します。 ・アーカイブにしない場合 FileRead_findFirst("data\script\*.scri"); で見つかります。 ・scriptフォルダをscript.dxaにした場合 同様に見つかります。 しかし、 ・dataフォルダを丸ごとdata.dxaにした場合 はファイルが見つからないと言われてしまいます。
メンテ
Re: FileRead_findFirstのアーカイブ時の挙動 ( No.4 )
名前:管理人 日時:2018/01/27 23:29

うーん、手元で同じ状況を再現してみましたが、問題なく見つかりました > FileRead_findFirst("data\script\*.scri"); で見つかります。 こちらは正しくは "data\\script\\*.scri" だと思うのですが、それが原因ということはないでしょうか?
メンテ
Re: FileRead_findFirstのアーカイブ時の挙動 ( No.5 )
名前:8127 日時:2018/01/28 14:30

すみません、言及不足でした。 再現しましたが、かなり限定的な条件でしか発生しないようです。 まず、data\\script\\1000,タイトル.scri という空のファイルを用意します。 非アーカイブの状態を[A]、 scriptフォルダをアーカイブした状態(data\\script.dxa)を[B]、 dataフォルダをアーカイブした状態(data.dxa)を[C]とします。 (アーカイブは全て暗号化なし) このときに以下のプログラムを実行すると[A][B]と[C]で挙動が変わります。 [A][B]:成功成功成功 [c] :成功成功失敗  と出力 ちなみに、search()で探しに行っているdata\\script\\storyフォルダは無くてかまいません。 #include "DxLib.h" void init() { ChangeWindowMode(true); //ウインドウモードにする SetWindowSize(640, 480); if (DxLib_Init() == -1) // DXライブラリ初期化処理 { return; // エラーが起きたら直ちに終了 } SetDrawScreen(DX_SCREEN_BACK); //描画先を裏画面に設定 } void test() { int handle = FileRead_open("data\\script\\1000,タイトル.scri"); if (handle == 0) { printfDx("失敗\n"); } else { FileRead_close(handle); printfDx("成功\n"); } } void search() { FILEINFO fi; int handle = FileRead_findFirst("data\\script\\story\\*,*.scri", &fi); if (handle != -1) { FileRead_findClose(handle); } } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { init(); // test(); //成功するはず test(); //二回連続でも成功するはず search(); test(); //searchの後は? ScreenFlip(); WaitKey(); DxLib_End(); // DXライブラリ使用の終了処理 return 0; // ソフトの終了 }
メンテ
Re: FileRead_findFirstのアーカイブ時の挙動 ( No.6 )
名前:管理人 日時:2018/01/29 01:13

ご情報ありがとうございます ご指摘いただいた不具合は 『DXアーカイブ内のファイルに対して FileRead_findFirst が失敗する( ひとつも該当のファイルが無い )と、  以降の同DXアーカイブ内のファイルのアクセスが正常に行えなくなる』 というものでした 修正版をアップしましたので、何度も申し訳ありませんが、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.exe // Android版 x86用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース ( 中身を既存のライブラリのファイルに上書きして、VisualStudioをお使いの場合は『リビルド』を、  BCCをお使いの場合は『再構築』をして下さい )
メンテ
Re: FileRead_findFirstのアーカイブ時の挙動 ( No.7 )
名前:8127(解決) 日時:2018/01/29 02:01

dataフォルダを圧縮したところ圧縮する前と同じ挙動になりました。 管理人様のおかげでゲームもリリースできそうです。 ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存