freecplusフレーム - ディレクトリ操作

ソースコード記述

freecplusは、Linuxシステムの下でC / C ++オープンソースのフレームワークで、C言語のソースコードテクノロジーネットワーク(www.freecplus.net)のダウンロードに進みます。

この記事では、ディレクトリ機能とクラスfreecplusフレームの動作を説明します。

宣言ファイルの関数やクラスはfreecplus / _freecplus.hです。

定義ファイルの関数やクラスはfreecplus / _freecplus.cppです。

サンプルプログラムはfreecplus / demoディレクトリにあります。

コンパイルされたルールファイルはfreecplus /デモ/メイクファイルです。

第二には、ディレクトリを作成します

あなたは "/tmp/aaa/bbb/ccc/ddd/data.xml" ファイルを作成したい場合はLinuxでは、あなたが最初に作成しなければなりません "を/ tmp / AAA / BBB / CCC / DDD"、次のように:

「を/ tmp」ディレクトリが存在しない場合は1)、「を/ tmp」を作成します。

2) "を/ tmp / AAA" ディレクトリが存在しない場合は、 "/ tmpに/ AAA" を作成します。

3)場合は、 "/ tmpに/ AAA / BBB" ディレクトリは "/ tmpに/ AAA / BBB" を作成し、存在しません。

"を/ tmp / AAA / BBB / CCC" ディレクトリが存在しない場合は4)、 "/ tmpに/ AAA / BBB / CCC" を作成します。

5)場合は、 "/ tmpに/ AAA / BBB / CCC / DDD" ディレクトリは "/ tmpに/ AAA / BBB / CCC / DDD" を作成し、存在しません。

6) "/tmp/aaa/bbb/ccc/ddd/data.xml" ファイルを作成します。

これらの操作はなく、多くの技術的な内容だけでなく、非常に迷惑ですが。

MKDIR関数は、ファイル名またはディレクトリ名の絶対パスに係る工程によってディレクトリステップを作成します。

関数の宣言:

bool MKDIR(const char *pathorfilename,bool bisfilename=true);

パラメータ:

pathorfilename:ファイル名またはディレクトリ名の絶対パス。

bisfilename:pathorfilenameの種類の説明は、真-pathorfilenameは、ファイル名またはディレクトリ名で、デフォルト値はtrueです。

戻り値が:; 2)pathorfilename引数が有効なファイル名またはディレクトリ名ではありません。3)ディスク容量不足1)権限の欠如:失敗が返された場合は正常に作成真陽性、偽の作成は失敗し、その理由は3例について、があります。

実施例(demo30.cpp)

/*
 *  程序名:demo30.cpp,此程序演示freecplus框架中采用MKDIR函数根据绝对路径的文件名或目录名逐级的创建目录。
 *  作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include "../_freecplus.h"

int main()
{
  MKDIR("/tmp/aaa/bbb/ccc/ddd",false);   // 创建"/tmp/aaa/bbb/ccc/ddd"目录。

  MKDIR("/tmp/111/222/333/444/data.xml",true);   // 创建"/tmp/111/222/333/444"目录。
}

ディレクトリ内のファイルへの第三に、アクセス

機能情報パッケージCDIRクラスのリストにディレクトリとそのサブディレクトリからファイルを取得するためのfreecplusフレーム。

クラスの宣言:

// 获取某目录及其子目录中的文件列表信息。
class CDir
{
public:
  char m_DirName[301];        // 目录名,例如:/tmp/root。
  char m_FileName[301];       // 文件名,不包括目录名,例如:data.xml。
  char m_FullFileName[301];   // 文件全名,包括目录名,例如:/tmp/root/data.xml。
  int  m_FileSize;              // 文件的大小,单位:字节。
  char m_ModifyTime[21];      // 文件最后一次被修改的时间,即stat结构体的st_mtime成员。
  char m_CreateTime[21];      // 文件生成的时间,即stat结构体的st_ctime成员。
  char m_AccessTime[21];      // 文件最后一次被访问的时间,即stat结构体的st_atime成员。
  char m_DateFMT[21];         // 文件时间显示格式,由SetDateFMT方法设置。

  vector<string> m_vFileName; // 存放OpenDir方法获取到的文件名(文件全名,包括目录名)列表。
  int m_pos;                  // 已读取m_vFileName容器的位置,每调用一次ReadDir方法m_pos加1。

  CDir();  // 构造函数。

  void initdata(); // 初始化成员变量。

  // 设置文件时间的格式,支持"yyyy-mm-dd hh24:mi:ss"和"yyyymmddhh24miss"两种,缺省是前者。
  void SetDateFMT(const char *in_DateFMT);

  // 打开目录,获取目录中的文件列表信息,存放于m_vFileName容器中。
  // in_DirName,待打开的目录名,采用绝对路径,如/tmp/root。
  // in_MatchStr,待获取文件名的匹配规则,不匹配的文件被忽略。
  // in_MaxCount,获取文件的最大数量,缺省值为10000个。
  // bAndChild,是否打开各级子目录,缺省值为false-不打开子目录。
  // bSort,是否对获取到的文件列表(即m_vFileName容器中的内容)进行排序,缺省值为false-不排序。
  // 返回值:如果in_DirName参数指定的目录不存在,OpenDir方法会创建该目录,如果创建失败,返回false,还有,如果当前用户对in_DirName目录下的子目录没有读取权限也会返回false,其它正常情况下都会返回true。
  bool OpenDir(const char *in_DirName,const char *in_MatchStr,const unsigned int in_MaxCount=10000,const bool bAndChild=false,bool bSort=false);

  // 这是一个递归函数,用于OpenDir()的调用,在CDir类的外部不需要调用它。
  bool _OpenDir(const char *in_DirName,const char *in_MatchStr,const unsigned int in_MaxCount,const bool bAndChild);

  // 从m_vFileName容器中获取一条记录(文件名),同时得到该文件的大小、修改时间等信息。
  // 调用OpenDir方法时,m_vFileName容器被清空,m_pos归零,每调用一次ReadDir方法m_pos加1。
  // 当m_pos小于m_vFileName.size(),返回true,否则返回false。
  bool ReadDir();

  ~CDir();  // 析构函数。
};

キャプションメンバ変数と関数CDIRクラスは、クラス宣言に詳細に記載されています。

レッツは、シナリオによるCDIRクラスの使用を示します。

次のスクリプトは、実行前にテスト用のディレクトリとファイルを生成します。

mkdir /tmp/root
mkdir /tmp/root/aaa
mkdir /tmp/root/bbb
cd freecplus
cp freecplus.* /tmp/root/.
cp demo/demo1* /tmp/root/aaa/.
cp demo/demo2* /tmp/root/bbb/.
cp demo/makefile /tmp/root/bbb/.

次のように上記のスクリプトを実行した後、中には/ tmp / rootディレクトリのディレクトリとファイルの一覧は以下のとおりです。

ここに画像を挿入説明

実施例(demo32.cpp)

/*
 *  程序名:demo32.cpp,此程序演示freecplus框架中采用CDir类获取某目录及其子目录中的文件列表信息。
 *  作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include "../_freecplus.h"

int main()
{
  CDir Dir;

  if (Dir.OpenDir("/tmp/root","*.h,*cpp",100,true,true)==false)
  {
    printf("Dir.OpenDir(/tmp/root) failed.\n"); return -1;
  }

  while(Dir.ReadDir()==true)
  {
    printf("filename=%s,mtime=%s,size=%d\n",Dir.m_FullFileName,Dir.m_ModifyTime,Dir.m_FileSize);
  }
}

業績

ここに画像を挿入説明

注意事項:

1)READDIR各メソッド呼び出しの後、他の画面への出力値CDIRクラスメンバ変数は、作用効果が観察されました。

2)in_MatchStrパラメータopendirなどの方法が広く実際の開発に使用される、非常に重要です。

ファイル名のドットた場合。「」始まり3)、opendirなどの方法を使用すると、これらのファイルを読みたい場合は、あなたがソースコード_OpenDir方法を変更することができ、これらのファイルを読むことはありません。

in_MaxCountパラメータ4)各ディレクトリのスキャン内のファイル数を設定するOpendDir方法、それが万を超えないよう推奨され、その値が大きすぎると、時間のディレクトリを開き長くなるが、また、より多くのメモリを消費します。

m_vFileNameコンテナ、ソート消費リソースと時間は、あなたがソートされていないソートすることができないかどうかをbSortパラメータ5)はopendirの設定。

第四に、著作権表示

C言語Technology Networkのオリジナルの記事、論文、著者と元にソースリンクを明記してくださいを再現。
出典:C言語テクノロジーネットワーク(www.freecplus.net)
著者:倫理コード農業

記事の誤字、またはコンテンツのエラー、またはその他の提案やコメントは、正しい私にメッセージをお願いした場合、どうもありがとうございました!

公開された159元の記事 ウォンの賞賛458 ビュー120 000 +

おすすめ

転載: blog.csdn.net/wucz122140729/article/details/105187358