none
ファイル保存のホルダー/derectoryを 無い場合 自動で新設する RRS feed

  • 質問

  • お世話になっています
    WindowsXPH SP3 VSC++6.0 MFC使用
    現在
    // MemDC.h: interface for the CMemDC class. 
    class CMemDC : public CDC {
     public: 
    BOOL SaveJPEG(LPCTSTR lpszPathName, int quality = 100); // changed for animation, from int quality = 75);
    とあり、

    // ChildView.h : interface of the CChildView class 
    CString m_imageD_F_Name;   // a temporary filename with directory 
    として、

    // ChildView.cpp : implementation of the CChildView class
    にて
     CMemDC memDC; 
    m_imageD_F_Name.Format("KolamImages\\%s.jpg", m_strFileTitle); 
    memDC.SaveJPEG(m_imageD_F_Name);

    で画像を保存しています。

    この場合 ”KolamImages”名のDirectory/Holderを置いていないと無効になるのですが、
    無い場合は自動で新設する設定はありませんでしょうか?




    2009年11月9日 1:00

回答

  • この場合 ”KolamImages”名のDirectory/Holderを置いていないと無効になるのですが、
    無い場合は自動で新設する設定はありませんでしょうか?

    mkdir() を使えば、存在しなければ作成、戻り値が0以外なら作成済みということで対応できます。

    以下、参考URLです。
    http://okwave.jp/qa370103.html

    2009年11月9日 1:38
  • _mkdir() は CRT(Cランタイム ライブラリ)、CreateDirectory() は プラットフォーム SDK の関数です。

    プラットフォーム SDK は Windows 専用の API を提供するライブラリで、
    Cランタイム ライブラリ はC言語や他のOSでも動作するよう、より汎用性の高いライブラリを提供します。

    CRT ベースで作るか、SDK ベースで作るかで呼ぶメソッドを変える必要があるのでしょうが、
    通常の Windows アプリを開発するのであれば、CRT と SDK で同じ機能を持つ関数がある場合、
    どちらを使うか、あまり考慮に入れなくてもいいかと思います。

    #とここまで書いて、識者に突っ込まれそうな悪寒が(汗

    以下、参考 URL です。

    ランタイム ライブラリ リファレンス
    http://msdn.microsoft.com/ja-jp/library/59ey50w6(VS.80).aspx

    互換性
    http://msdn.microsoft.com/ja-jp/library/sk54f3f5(VS.80).aspx

    ANSI C 準拠
    http://msdn.microsoft.com/ja-jp/library/45aft37a(VS.80).aspx

    2009年11月10日 2:55
  • ちなみに最初の回答で

    > mkdir()

    と書いたのは誤りで、_mkdir() が正解でしたね。(-ω-; mkdir は非推奨です。
    詳しくはこちらを・・・<(_ _)>

    互換性に影響する変更点 (CRT)
    http://msdn.microsoft.com/ja-jp/library/ms235497(VS.80).aspx

    使用を推奨されていない CRT 関数
    http://msdn.microsoft.com/ja-jp/library/ms235384(VS.80).aspx

    • 編集済み ひらぽん 2009年11月10日 3:05 スペルミスです。
    • 回答としてマーク 高橋 春樹 2009年12月18日 5:10
    2009年11月10日 3:03
  • CMemDC自体も、CMemDC::SaveJPEG()も、MFCなどのクラスライブラリで提供しているクラス・クラス関数ではありません。
    したがって、CMemDC::SaveJPEG()を作成された人に仕様を確認してみてください。
    2009年11月9日 1:35
  • 単純に考えれば、そのフォルダが存在してるかをチェックして存在していなかったら作成すると言うプログラムを作成すれば、
    良いと思うのですが、訊きたい内容はそういう内容ではないのでしょうか?

    フォルダが存在しているかどうかを調べる関数やフォルダを作成する関数なら調べれば、出てくると思いますよ。

    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    2009年11月9日 1:35

すべての返信

  • CMemDC自体も、CMemDC::SaveJPEG()も、MFCなどのクラスライブラリで提供しているクラス・クラス関数ではありません。
    したがって、CMemDC::SaveJPEG()を作成された人に仕様を確認してみてください。
    2009年11月9日 1:35
  • 単純に考えれば、そのフォルダが存在してるかをチェックして存在していなかったら作成すると言うプログラムを作成すれば、
    良いと思うのですが、訊きたい内容はそういう内容ではないのでしょうか?

    フォルダが存在しているかどうかを調べる関数やフォルダを作成する関数なら調べれば、出てくると思いますよ。

    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    2009年11月9日 1:35
  • この場合 ”KolamImages”名のDirectory/Holderを置いていないと無効になるのですが、
    無い場合は自動で新設する設定はありませんでしょうか?

    mkdir() を使えば、存在しなければ作成、戻り値が0以外なら作成済みということで対応できます。

    以下、参考URLです。
    http://okwave.jp/qa370103.html

    2009年11月9日 1:38

  • ありがとうございました。

    CreateDirectory("KolamImages", NULL);//2009/11/7 Holderを既存でないとき作成
    これを一行いれて はらたくことを確認したました。
    mkdir(); // C言語でしょうか?
    _mkdir();//同じC言語のようですが どうちがうのでしょうか?
    C言語でも恩軸働くようですが 上のC++のものがよいでしょうか?

    教えてください。

    2009年11月9日 21:31
  • _mkdir() は CRT(Cランタイム ライブラリ)、CreateDirectory() は プラットフォーム SDK の関数です。

    プラットフォーム SDK は Windows 専用の API を提供するライブラリで、
    Cランタイム ライブラリ はC言語や他のOSでも動作するよう、より汎用性の高いライブラリを提供します。

    CRT ベースで作るか、SDK ベースで作るかで呼ぶメソッドを変える必要があるのでしょうが、
    通常の Windows アプリを開発するのであれば、CRT と SDK で同じ機能を持つ関数がある場合、
    どちらを使うか、あまり考慮に入れなくてもいいかと思います。

    #とここまで書いて、識者に突っ込まれそうな悪寒が(汗

    以下、参考 URL です。

    ランタイム ライブラリ リファレンス
    http://msdn.microsoft.com/ja-jp/library/59ey50w6(VS.80).aspx

    互換性
    http://msdn.microsoft.com/ja-jp/library/sk54f3f5(VS.80).aspx

    ANSI C 準拠
    http://msdn.microsoft.com/ja-jp/library/45aft37a(VS.80).aspx

    2009年11月10日 2:55
  • ちなみに最初の回答で

    > mkdir()

    と書いたのは誤りで、_mkdir() が正解でしたね。(-ω-; mkdir は非推奨です。
    詳しくはこちらを・・・<(_ _)>

    互換性に影響する変更点 (CRT)
    http://msdn.microsoft.com/ja-jp/library/ms235497(VS.80).aspx

    使用を推奨されていない CRT 関数
    http://msdn.microsoft.com/ja-jp/library/ms235384(VS.80).aspx

    • 編集済み ひらぽん 2009年11月10日 3:05 スペルミスです。
    • 回答としてマーク 高橋 春樹 2009年12月18日 5:10
    2009年11月10日 3:03
  • くわしく ありがとうございました。
    2009年11月14日 23:11
  • こんにちは。フォーラムオペレーターの高橋春樹です。

    Atsushi777さん、PATIOさん、ひらぽんさん
    いつもお世話なっております。

    Shonan Hannyaさん
    MSDNフォーラムのご利用ありがとうございます。

    問題が解決したようなので、大丈夫と思いますが、
    今回皆様からの投稿が問題解決に繋がるものであった、と思いましたので、
    勝手ながら、回答マークを付けさせてもらいました。
    不適切と思いましたら、回答マークを削除することも可能です。

    今後ともMSDNフォーラムを宜しくお願いします(^_^)


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    2009年12月18日 5:11