C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: <io.h>? _findfirst()??


(過去ログ 130 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■77111 / inTopicNo.1)  <io.h>? _findfirst()??
  
□投稿者/ こまお (10回)-(2015/09/14(Mon) 16:13:50)

分類:[C/C++] 

こんにちは。

ubuntu linuxで↓とすると、『io.hが無い』と言われました。
ググった結果<sys/io.h>とせよとのことだったのでそのようにすると、
今度は『c_fileのサイズが判らん』とか『_findfirstなんか知らん』とか言わ
れます。windowsのGCCなら普通に動くのですが。

#include <stdio.h>
#include <io.h>

int main(void) {
 struct _finddata_t c_file;
 long hFile;
 if ((hFile = _findfirst("*.csv", &c_file))) {
  do {
   printf( "%s\n", c_file.name);
  } while (_findnext(hFile, &c_file) == 0);
  findclose(hFile);
 }
}

引用返信 編集キー/
■77112 / inTopicNo.2)  Re[1]: <io.h>? _findfirst()??
□投稿者/ 774RR (310回)-(2015/09/14(Mon) 18:38:35)
で、ご質問は何でしょう?

引用返信 編集キー/
■77113 / inTopicNo.3)  Re[2]: <io.h>? _findfirst()??
□投稿者/ こまお (11回)-(2015/09/14(Mon) 19:25:05)
ubuntu linuxでも動く様にするにはどうしたらいいでしょうか。
引用返信 編集キー/
■77114 / inTopicNo.4)  Re[3]: <io.h>? _findfirst()??
□投稿者/ 774RR (311回)-(2015/09/14(Mon) 19:44:59)
_findfirst _findnext は Windows 固有機能なので Linux には無い、ってことっす。
「ファイルを列挙する」機能は C や C++ の言語規格書では定められていない部分で、それぞれの OS 依存なわけです。
参考: Visual C++ では C 言語仕様 C++ 言語仕様の範囲外の API には、頭にアンダースコアがつく仕様。

では Linux でファイルを列挙するにはどうすればよいかというと opendir とか readdir とかを使う。
http://linuxjm.osdn.jp/html/LDP_man-pages/man3/opendir.3.html

_findfirst とまったく同等な機能は「無い」ので、必要な処理は自作しないといけないよ。
引用返信 編集キー/
■77119 / inTopicNo.5)  Re[4]: <io.h>? _findfirst()??
□投稿者/ こまお (12回)-(2015/09/15(Tue) 12:40:08)
そうでしたか。
opendirとreaddirと...
あとはファイル用のマッチャが要りますね。
無いなら作るしかかいですね。
なんとかします!

解決済み
引用返信 編集キー/
■77124 / inTopicNo.6)  Re[5]: <io.h>? _findfirst()??
□投稿者/ 774RR (312回)-(2015/09/15(Tue) 13:56:54)
まあそうなんだけど、ファイル検索の機能はシステムが用意してくれてるのでそのまま使うと吉。
http://linuxjm.osdn.jp/html/LDP_man-pages/man3/glob.3.html
このマニュアルのサンプルがわかりにくいと思うので別解を
--- globtest.c ---
#include <glob.h>
#include <stdio.h>
int main(int argc, char **argv) {
    int i;
    glob_t g;
    glob(argv[1], 0, 0, &g);
    for (i=0; i<g.gl_pathc; ++i) {
        printf("%d : <%s>\n", i, g.gl_pathv[i]);
    }
    globfree(&g);
    return 0;
}
オイラのこのサンプル使うときは shell 側の glob 展開がされないよう、コマンド起動に注意が必要。
$ ./globtest *.csv
だと shell が * を展開するので期待通りにならない。
$ ./globtest '*.csv'
のようにシングル引用符を使う必要がある。

解決済み
引用返信 編集キー/
■77152 / inTopicNo.7)  Re[6]: <io.h>? _findfirst()??
□投稿者/ こまお (13回)-(2015/09/17(Thu) 17:52:11)
ありがとうございます。
でも、エラー処理がめんどくさかったので、
へなちょこマッチャで済ませました(^^;
引用返信 編集キー/
■77209 / inTopicNo.8)  Re[7]: <io.h>? _findfirst()??
□投稿者/ こまお (14回)-(2015/09/26(Sat) 09:29:52)
ちょっと見に来たら解決済みが消えてたので。
#そういうシステムなのね
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -