VC ++ファイルまたはフォルダが存在する(rpm)を決定

ファイルまたはフォルダがあるかどうかを判定するために、VC ++

、ほとんどの場合、いくつかのファイルシステム関連の機能を使用する必要があるWindowsアプリケーションプロジェクトでは、のような:、ファイルが存在するかどうかを判断するフォルダが空であるかどうかを判断する、フォルダとそのすべての子を削除するには、ファイルフォルダのサイズを計算する、というように。、Windowsはこれらの操作を実行するために、直接APIを提供していない理由を私は知らないので、川や湖はジャンル、剣の様々なコードを作成し始めました。
アベニュー・ストリーム:GetFileAttributes

ジェーン・アベニューへの道あなたの目の前に!一般的なアプリケーションでは、ファイルやフォルダを決定するGetFileAttributes間違いなく最高のAPIが存在します。それは、より重要なのは、明確で使いやすいサポートXPシステム、を備えていますので、直接ファイルやフォルダ間の違いがあることができます。私たちは関数が存在するかどうかを確認するために、ファイルやフォルダを作成する場合は、優先されなければならない、または私はあなたに質問をするだろう:(。何か問題がある場合はねえ、= =)背の高いアベニューあなたはSI BU SI、あなたを行っていませんSA?次のようにコード:

//ファイルが存在するか否かを判断する
BOOL IsFileExist(CONSTのCString&csFile)
{
    DWORD = dwAttrib GetFileAttributes(csFile)を、
    戻りINVALID_FILE_ATTRIBUTES = dwAttrib == 0 &&(&dwAttrib FILE_ATTRIBUTE_DIRECTORY);!
}
//は、フォルダが存在するか否かを判断する
BOOLのIsDirExist (CONSTのCString&csDir)
{
    DWORD = dwAttrib GetFileAttributes(csDir)。
    !&&戻りdwAttrib INVALID_FILE_ATTRIBUTES = 0 =(&dwAttrib FILE_ATTRIBUTE_DIRECTORY);!
}
//ファイルまたはフォルダが存在するか否かを判定する
BOOL IsPathExist(CONSTのCString&csPath)
{
    DWORD = dwAttrib GetFileAttributes(csPath);
    != dwAttrib INVALID_FILE_ATTRIBUTESリターンが;
}

/ / Tsuburi変異バリアント(少し速く聞こえる)、備考1参照。
BOOL IsPathExist(CONSTのCString&csPath)
{
    WIN32_FILE_ATTRIBUTE_DATAのattrsには、= {0};
    != 0戻りGetFileAttributesEx(csPath、GetFileExInfoStandard、&ATTRS);
}


残酷ストリーム:のCreateFile

この世界は冷酷な人々の不足だけでなく、プログラマのコミュニティを持っていません。そのための強力なAPICreateFile OPEN_EXISTINGのNOで決定したファイルやフォルダを提示するために使用することができるように構成。外部リンクが、その雄弁な言葉の何千ものドキュメントと数十、すべてのプログラマが明示的に宣言する:私はピットの多くを持っている、あなたはそれを踏むことを敢えて?宣言文は、冷酷な人に加えて、多くの人を阻止します。これらの冷酷な人々は、すべての死体が破壊説明テキストおよび外部リンクの多くを置く、最終的にはルールの連鎖を抽出-それは、プロジェクトで使用してファイルだ、と。しかし、一つのことには慎重でない場合、チェーンはこのルールを破るだろう、BUGの悪魔が来ます!したがって、このジャンルの弟子たちは、プロジェクトのためか、自分自身で両方、残酷と呼ばれています!したがって、以下は、私は、関数の正確性については責任を負いません(私も私の機械的なキーボードを交差あえて、それは確かに真実ではない、誓います)!コードを次のように

ファイルまたはフォルダが存在するかどうか//
BOOL IsPathExist(のconst CStringの&csPathを)
{
    HANDLEのhFile = CreateFileを(
        csPathが//ファイルまたはフォルダを判断するには
        0を、//我々がするだけで、最小限の権限が必要です
        FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE、//我々はすべてのファイルを持っていないが占有
        NULL、//セキュリティ属性を、私たちは気にしません
        OPEN_EXISTING、//は、既存のファイルを開いて、それが私たちの目標である
        FILE_ATTRIBUTE_NORMAL、//デフォルト
        なし// NULL
    );
    IF(!== INVALID_HANDLE_VALUEのhFile &&(ERROR_ACCESS_DENIED =のGetLastError()))
    {
        FALSEを返す;
    }

    IF( != INVALID_HANDLE_VALUEのhFile)
    {
        CloseHandleを(のhFile); //ここでは、ファイルハンドルをクローズしなければならない、またはファイルが占有し、リソースのリークが発生します。
        = INVALID_HANDLE_VALUEのhFile;
    }
    TRUEを返す;
}

   

古典的な流れ:_access

新しいのような一部の人々は、当然、それは懐かしさでした。いくつかの古典的な感性を持つプログラマ、およびサイト上のWindows APIでCライブラリ関数として純粋な土地を見つけることを主張しました。だから、きちんとした低キー_access間パイルハンプ変数や関数名に沈黙の中で自分の尊厳を守ります。コードに何も言うことなく、トリビュート、:

//ファイルまたはフォルダが存在するか否かを判定する
BOOL IsPathExist(CONSTのCString&csPath)は
{
    INT = nRet _taccess(csPath、0);
    0 == == EACCES nRet || nRetを返します;
}

  

繊細な流れ:FindFirstFile

彼らはどこに行っても新人だけの素朴いつも、家を出るとき、罪のない、彼らは宗派が繊細で設立しました。FindFirstFileを検索し、心との最初の一致とその支持を獲得するために意味の新人の彼の探査を開始しました。しかし、実用的なアプリケーションでは、大きな悪魔のバグを倒すのは簡単だった:そのパラメータは\年末までにすることはできません、それは、正確にコードの複雑さをルートを決定することはできません。次のようにコード:

//ファイルが存在するか否かを判断する
BOOL IsFileExist(CONSTのCString&csFileを)
{
    IF(csFile.IsEmptyは())
        FALSEを返す;

    BOOL bEndOfSlash =(_T( '\\')== csFile.GetAt(csFile.GetLengthを( 。) - 1)|| _T( '/')== csFile.GetAt(csFile.GetLength() - 1));
    IF(bEndOfSlash)
        FALSEを返します。

    WIN32_FIND_DATA FD = {0}。
    hFind = FindFirstFile(csFile、&FD)を処理します。
    (INVALID_HANDLE_VALUE == hFind)場合は
    {
        FALSEを返します。
    }

    FindClose(hFind)。
    hFind = INVALID_HANDLE_VALUE;
    0 ==(FILE_ATTRIBUTE_DIRECTORY&fd.dwFileAttributes)を返します。
}
//判断文件夹是否存在
BOOL IsDirExist(CONSTのCString&csDir)
{
    IF(csDir.IsEmpty())
        戻りFALSE。

    BOOL bEndOfSlash =(_T( '\\')== csDir.GetAt(csDir.GetLength() - 1)|| _T( '/')== csDir.GetAt(csDir.GetLength() - 1))。
    CStringのcsFind = csDir +(?bEndOfSlash _T( "*"):_T( "\\ *"));


    = HFind FindFirstFileハンドル(csFind、FD&);
    IF(INVALID_HANDLE_VALUE == hFind)
    {
        FALSEを返す;
    }

    FindCloseを(hFind);
    hFind = INVALID_HANDLE_VALUE;
    != 0リターン(FILE_ATTRIBUTE_DIRECTORY&fd.dwFileAttributes);
}

//ファイルまたは分析フォルダが存在する
BOOL IsPathExist(のconst CStringの&csPath)
{
    返すIsFileExist(csPath)|| IsDirExist(csPath);
}


奔放フロー:PathFileExistsの

人生は短いです、月のJinzunが空ましょうと、彼らが書くコードに代わりに焦点を当ててはいけません。このジャンルの弟子、のような観光名所、少しの副作用は問題ではない、とその時は同様にあまりにも良い時間を持っているかもしれません!そこで、彼らはPathFileExistsを選びました。権限APIによってカプセル化された、本当に安心感を与えますが、それは、それは追加のShlwapi.dllから見つかりに頼るために私たちを必要とし、不快です。ただ、APIのため、それだけの価値は?瞑想の一部の人々が、一部の人々は、すでに答えを与えています。次のようにコード:

//ファイルまたはフォルダが存在するか否かを判定する
BOOL IsPathExist(CONSTのCString&csPath)は
{
    PathFileExistsリターン(csPathが);
}


死フローを求める:DeleteFileを/ RemoveDirectory

プログラマは生物圏の完全な円で、生物多様性は素晴らしい保証です。死のストリームを求める:だから私たちは無視してはならないジャンルがあり、それはということです!死の弟子ストリームをシーク、人生の意味は、死ぬ他の人にいくつかの予期しない方法を持って来るためにある、おそらくバタフライ効果、それの一部に貢献!Windowsプラットフォームでは、彼らが確立した事実が、最終的には、ファイルやフォルダが存在することを教えてくれて成功しました。コードは次のよう:

//ファイルが存在するかどうかを決定する
BOOL IsFileExist(のconst CStringの&csFile)
{
    (DeleteFileを(csFile))IFを
    {
        FALSEを返す; //は本当にああ、存在しません!
    }
    戻りERROR_ACCESS_DENIEDのGetLastError ==();
}
//フォルダがあるか否かを判断する
BOOL IsDirExist(CONSTのCString&csDir)
{
    IF(RemoveDirectory(csDir))は
    {
        FALSEを返す; //バーバラが存在しません!
    }
    == ERROR_ACCESS_DENIEDのGetLastErrorリターン()|| ERROR_DIR_NOT_EMPTYのGetLastError ==();
}
//ファイルまたはフォルダが存在するか否かを判定する
BOOL IsPathExist(CONSTのCString&csPath)は
{
    IsFileExist(csPath)|| IsDirExist(csPath)を返す;
}

要約

上記ジャンル、長所と短所。次のようにリストです:
ファイルとフォルダのコードの追加の依存関係を持っているを識別することができますジャンルサポートXPは(それ以外の場合は、必ずしも正しいというわけではありません)エラーの難易知ら例程度を決定するために
(アベニュー・ストリームはいはい簡単なネットワーク共有のサブフォルダのネットワーク共有に指定しますフォルダ)
「C:\」が、「C:/」残忍な流れのようなルートディレクトリに困難である!これが可能である- -
古典フローはありません簡単です
繊細な流れは難しいんです
奔放フローが指定したフォルダにShlwapi.dllから見つかりUNCパスに簡単ではありません(ファイルができる)
死ストリームを求め、私は●試す勇気がなかったということです- ●

しかし、私はこれらの学校は、このパーティということであると信じていません。すべての湖。私は何人かの人々が場所を知らないと信じて、いくつかの隠された宗派、古代の家族がなければならない、毎分は、これらの学校を殺すことができます。また、インサイダーは私に言ってください!
メモは、

    注1:ファイルが最も効率的な機能が存在するかどうかについての判断を参照してください。https://blog.csdn.net/dragoo1/article/details/44492239
----------------

オリジナルリンクします。https://blog.csdn.net/u012494876/article/詳細/ 51204615

おすすめ

転載: www.cnblogs.com/htj10/p/11567022.html