Cのことはすっかり忘れてしまった(恋愛風

あなたと過ごした5年弱。私はあなた(C言語)のおかげで生きていけた。
確かにその時間はあったはずなのに・・・。

今はもう、どんな風にあなたを呼んでいたのかすら思い出せない。


C言語かC++でフォルダごとのファイル数えよう、と思って手が止まった。
あれってどうすんだっけ?wwww 一応、それで飯食ってたんだがなぁ。
はてさて、開発環境からしてないぞ(;´Д`)

なんか Visual Studio でもなんも弄ってないブランクの状態でコンパイルされない(;´Д`)
windows SDK入れろってことらしい?

Windows SDK アーカイブ – Windows アプリ開発

ソリューションの再ターゲットとやらでハローワールド成功。良かったー。

C言語でフォルダ内のファイル数とファイル名を取得 – Qiita
のコメント欄を見る
FindFirstFile 関数
を使うらしい。

次のサンプルコードは、FindFirstFile の最も簡単な使い方を示します。

https://msdn.microsoft.com/ja-jp/library/cc429233.aspx

#define _WIN32_WINNT 0x0400
#include "windows.h"
int
main(int argc, char *argv[])
{
  WIN32_FIND_DATA FindFileData;
  HANDLE hFind;
  printf ("Target file is %s.\n", argv[1]);
  hFind = FindFirstFile(argv[1], &FindFileData);
  if (hFind == INVALID_HANDLE_VALUE) {
    printf ("Invalid File Handle. Get Last Error reports %d\n", GetLastError ());
  } else {
    printf ("The first file found is %s\n", FindFileData.cFileName);
    FindClose(hFind);
  }
  return (0);
}

うむ、動かぬ。でたなワイド文字列(?)。もう忘れたぞ。

プロジェクト->プロパティ->構成プロパティ->全般 の中にある
文字セットを[Unicode 文字セットを使用する]から[マルチバイト文字セットを使用する]

https://oshiete.goo.ne.jp/qa/2236318.html

で回避。

うーむ、思い出せないwww

// Ctest.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
extern long Directory(char path[]);
int flg;
int
main(int argc, char *argv[])
{
flg = 0;
long f = Directory(argv[1]);
if (f > 0) {
printf("%s    %d", argv[1], f);
}
return (0);
}
long Directory(char path[])
{
char subpath[_MAX_PATH];
char temp[_MAX_PATH];
WIN32_FIND_DATA lp;
long f = 0;
strcpy(temp, path);
HANDLE h = FindFirstFile(temp, &lp);
temp[strlen(temp) - 1] = '\0';//*を消している
do
{
if ((lp.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
&& strcmp(lp.cFileName, "..") != 0 && strcmp(lp.cFileName, ".") != 0)
{
//subpathでディレクトリのフルパスが分かる
wsprintf(subpath, "%s%s\\*", temp, lp.cFileName);
printf("%s", subpath);
flg = 1;
Directory(subpath);
}
if ((lp.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)
{
f++;
}
} while (FindNextFile(h, &lp));
if (flg == 1) {
printf("    %d\n", f);
flg = 0;
}
FindClose(h);
return f;
}

参考にしたのは(というかほぼそのままだけどw)
指定したディレクトリ以下のファイルを列挙

出力

>Ctest c:\test\*
c:\test\test2\*    2
c:\test\*    3

どのくらい面白かった?

星を押して送信してね

平均 0 / 5. Vote count: 0

是非フォローしてください

最新の情報をお伝えします

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です