VC++フォルダの操作 - 中学生がプログラミングの質問

このQ&Aのポイント
  • VC++でプログラミングを勉強している中学生が、フォルダの操作に関する質問をしています。質問内容は「SOFTフォルダ内に予め「DATA」というフォルダを作る方法はあるか」や「テキストボックスの文字列と同じ名前のフォルダを作る方法はあるか」です。
  • VC++のコードでフォルダを作成する方法について、中学生が質問しています。現在作成しているソフトの要件として、「SOFTフォルダ内に予め「DATA」というフォルダを作りたい」ということや、「テキストボックスの文字列と同じ名前のフォルダを作りたい」ということがあります。
  • 中学生がVC++でプログラミングを勉強している中で、フォルダの操作について質問しています。具体的には、「SOFTフォルダ内に予め「DATA」というフォルダを作成する方法はあるか」ということや、「テキストボックスの文字列と同じ名前のフォルダを作成する方法はあるか」ということについてです。
回答を見る
  • ベストアンサー

VC++ フォルダの操作

VC++でプログラミングを勉強している中学生です。 今、ちょっとしたソフトを作ってみているのですが、いくつか質問させていただきたいです 1 exeファイル本体を保存しているフォルダ「SOFT」があるとします。 その中に、予め、「DATA」というフォルダを作りたいのですが、完成したSOFTフォルダの中を直接いじるほかに方法はないでしょうか? 2 そのexe本体の中のボタンで、「DATA」の中に、さらにもうひとつ、テキストボックス内の文字列と同じ名前のフォルダを作りたいとします。 テキストボックスの名前が「textDirName」としたら #include<direct.h> ・・・・・中略・・・・・ _mkdir("./DATA/textDirName -> Text"); ではだめなんでしょうか? 書いてみるまえから、理屈的にはなんとなくダメなんだろうなというのはうすうす思ってたんですが、案の定フォルダなんて作成されませんでした。 どのように書けばいいのでしょう・・・? 同時にふたつも質問をしているのはまずいかもしれませんが、一人でも救いの手を差し伸べてくれたらト思います 是非回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • unacyo
  • ベストアンサー率51% (35/68)
回答No.2

通常、ソフトが使うフォルダは、インストール時にインストーラで作らせるか、プログラムが起動する度に一度だけフォルダが存在するかどうか調べて、なければ作るという感じにします。 場合によっては、使う人が間違って消しちゃったりしますしね。 なお、フォルダが存在するか否かについては、FindFirstFile()を使います。  参考 → http://nienie.com/~masapico/api_FindFirstFile.html あと、_mkdir()の仕様についてはANo.1の方が言っていますので、作られない原因のもう1つの理由を書いておきますと、フォルダとして使える文字というのは決まっていて、半角の:*?<>"| は使えないことになっています。また、¥や/もフォルダ名として使用できません。これらはパス区切りとして認識されますので。 エクスプローラでフォルダをつくり、そこに半角の<を入力してみてください。XPならリターンキーで確定した際に、Win7なら入力した際に、使えない文字として表示されます。 なので、_mkdir()に指定するパス名にこれら使用不可文字を入れたい場合は、全角で代用する、アンダーバーに変えてしまう、など、別の文字に変換する必要があります。 テキストボックスに入力した文字そのままを作成するのは使用不可文字が含まれていたらエラーとする、などのチェックが必要です。(これは使えません、等のエラーを表示して作らせない)

asateimax
質問者

お礼

インストーラという方法はいいですね。 FindFirstFile()は早速書き足してみようと思います。 _mkdirの件に加えても事前にフォルダを作成する方法なども教えてくださったので、今回はベストアンサーにさせていただきます

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

少なくとも > _mkdir("./DATA/textDirName -> Text"); これは 「./DATA/」 の下に 「textDirName -> Text」 というフォルダを作るものだから、目的の動作にはなりません。 _mkdirに指定するのは文字列ですから、予めsprintfとかstrcatとか、std::stringとかCStringとか、とにかくtextDirName->Text の内容を取り出して、 「./DATA/作成したいフォルダ名」 という文字列を作った上で_mkdirに与えないと。 // PerlとかPHPとか、スクリプト言語だと文字列中で変数の展開してくれるものもありますが、 // Cにはありません。 あと、_mkdirは一段しかフォルダを作らないので、 ./DATAまでは先に_mkdirするか作っておく必要があります。 さらに、.exeがあるのがSOFTフォルダだとしても、実行時フォルダがSOFTとは限りません。 SOFTの下に作るなら、別途実行ファイルの場所を調べる必要があります。

asateimax
質問者

お礼

ありがとうございます。 あらかじめ文字列を作る、ですか・・・ 早速試してみます!

関連するQ&A

  • VC++ フォルダの作成

    この間、似たような質問をさせていただきました 内容は、テキストボックスから文字列を取得して、その文字列と同名のフォルダをつくりたいというものでした。 回答者さまのヒントから、C:直下のDATAフォルダ内にそのtextBox1 -> Textのフォルダを作ろうということにしました。 別の回答者さまのヒントで、strcatもしくはsprintfなどを使って、予め文字列を作成しておいて、それを_mkdirに渡せばうまくいくとの指摘をいただきました。 理屈的には理解したのですが、strcatで試してみたところ、うまくいきませんでした。 コードが間違っていると思うので、診てもらってよろしいでしょうか? ----------------------------------------------------------------------- char *str; *str = "C:\\DATA\\"; strcat(str, textBox1 -> Text); _mkdir(str); ------------------------------------------------------------------------ _mkdir単体での実行はうまくいくので、strcatか、もしくはポインタの扱いが間違っていると思います。 指摘がいただけたら、よろしくおねがいします。

  • VC++2010を覚えたい(極めたいではない)

     ExcelVBAで実験データを整理していますが、Excelのみでしか使えない等の問題からVC++2010をそこそこ使えるようになりたいのです(極めようとまでは思っていません)。先日もここで質問させていただいたのですが、メッセージボックスを出したりファイル操作をしようとすると、知識不足のためコードが正しく書けずエラーばかり出て格闘しています(VBAだと、msgbox"こう書けば表示される" の一行で済むことをやるのに、かなり格闘します)。  そこで、これら基本動作を完全に使いこなせるようにするために勉強をしたいのですが、何について勉強すればいいのかよくわかりません。どんな本を買って何を勉強すべきでしょうか?いい本があったら教えてください。特にできるようになりたいことを下に書きます。 1 #include <stdio.h>とかのインクルードファイルを宣言する位置。 2 intやdouble等の変数宣言も、たまにエラーでできないことがある。   関数内では変数宣言の方法が違うのかな?   String^ でどうして^がついたりつかなかったりするかわからない。   これでエラーとかよく出ます。^は大嫌い>< 3 メッセージボックスとかの表示。messageboxの前や後ろにshowとか::とかどうして必要か   わからない。メッセージボックスに確認する変数の数値を出すのも難しい。 4 データファイルをいろいろ操作したい。データファイルはテキストデータのみ 5 グラフもVC++で書けるとうれしい。必要があるときだけでいい。 forやif等の制御構造、配列、ポインタ等はもう知っています。 これらができるようなるには、「クラス」とかを勉強するとわかるのでしょうか? クラスが何のことだかもわかりませんが。

  • アクセス2000でフォルダの作成

    アクセス2000を使っています。 アクセス2000で、フォーム上にテキストボックスを配置し、コマンドボタンを押すと、予め決められたフォルダの中にあるテキストボックスと同じ名前のフォルダを開き、同じ名前のフォルダがなければ、テキストボックスと同じ名前のフォルダを作成してから開くようにしたいのですが、VBAでできますか?  誰か教えて下さい。

  • フォルダ作成について

    現在_mkdirにてフォルダを作成しているのですが ユーザーに入力してもらった名前でフォルダが作られ、 さらにそのフォルダの中にも別で入力してもらった名前のフォルダが作られるようにしたいです。 例)\\abc\\(入力内容1)\\xyz\\(入力内容2)\\ファイル.txt いろいろ試したのですが _mkdir("\\abc"); _mkdir("\\abc\\(入力内容1)"); となった時点でエラーでとまってしまいました。 何かいい方法はないでしょうか。

  • VCでの外部アプリ操作

    VCを使用してソフト(exeファイル)を操作(値入力や結果の取得)することは可能なのでしょうか。可能であるならば方法を教えて頂けないでしょうか。 開発環境はOS:Windows Vista 言語:Microsoft Visual studio 2005 C++ exeファイルはDeliphで作成されたものであるデータファイルを読み込んで値を計算方法・設定値を入力し結果を出力するソフトです。

  • VC9でHellowWorldが動かない。

    表題の通りです。 今日、VC8からVC9に移行したのですが、どれをビルドしても、 「MSVCP80.dllが見つからないため~」 というメッセージボックスが表示されたため試しに、 HellowWorldをやってみましたがやはりそうなります。 //HellowWorld.cpp #include <stdio.h> int main() {  printf("HellowWarld"); } 調べてみたところ、 「Microsoft Visual C++ 2008 再頒布可能パッケージ (x86) (http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=ja)」 を入れると直るとのことですが、直りません。 widows/WinSxSから、msvcp80.dll,msvcr80.dllなどを直接HellowWorld.exeがあるところに入れてみましたが、 「正しいwindowsイメージではありません」 もしくは 「RuntimeError (中略) R6034 An applcation has made an attempt to load the c runtime library incorrectly」 とでます。 一体どうすれば、この問題を解決できるのでしょうか? 環境は上記の通りVC9です。 よろしくお願いします。

  • VC++2005 テキストボックス

    現在、VC++2005でプログラムをしているのがどうしてもエラーが出てしまうのでわかる方がいればよろしくお願いします。 プログラムとしては、テキストボックスの中のデータが空だった場合にはある処理を行うというものを作っています。 プログラム本体は、 if(textBox1==NULL) { label1->Text="データがありません\n"; } です。 エラーメッセージは、 エラー 1 error C2446: '==' : 'int' 型から'System::Windows::Forms::TextBox ^' 型への変換ができません。 というメッセージが出てしまいます。 このエラーは、型変換が違っているということのエラーなのでしょうか?どのように修正するとよいのでしょうか? 説明などがとても下手かもしれませんが、よろしくお願いします。

  • VC++2005での他のアプリ操作について

    VC++2005でWindowsフォームアプリケーション形式でプロジェクトを作成し、他の人が作成したWindow形式のtextboxやコンボボックスなどが存在するソフトを操作したいのですが、どなたかご教示いただけないでしょうか。 環境はOS:Windos vista 開発ソフト:Microsoft Visual Studio C++ 2005 です。 つい先日、同様の質問をし、 ”基本的にはFindWindow、EnumWindowとかでアプリケーションのトップウィンドウを探して、さらにEnumChildWindow、GetDlgItemとかでテキストボックスやコンボボックスを探して操作。 ボタンを押すのは、トップウィンドウに対してSendMessage(WM_COMMAND,~);とかでできるかと思います。” と教えていただいたのですがWindowsフォームアプリケーション形式では使えないような感じなのでどうすればいいのかわかりません。 大変困っています。よろしくお願い致します。

  • VC++6.0とVB6.0の開発方法

    どうかよろしくお願いします。 早速ですが私は今大学院生であり、大学院を中退してしまった先輩の開発したアプリケーションを改造したいと考えています。しかし、そのアプリに関して説明書が無く、自分でソースコードを解読し、改造しなければなりません。 アプリは起動するとエクスプローラのような画面になり、フォルダを選択してその中のファイルの設定項目に数値を入力し、メニューバーから「実行開始」を選択すると、ある現象のシミュレーション結果を出力する、といったソフトです。 その先輩はVisual Studio 6.0を用いて、VC++6.0とVB6.0で開発しており、(多分)全てのソースコードは残っています。たまにバグが出ますが、アプリもちゃんと動きます。 私は、こういったソフト開発はVisual Studio .NET 2002を用いてVC++.netでダイアログベースのMFCアプリケーションを作ったことならあるのですが、Visual Studio 6.0は使ったことが無く、VC++6.0とVB6.0の異なる言語でひとつのアプリを作ったことは未経験です。 現在、ソースコードと格闘中ですが、.NET 2002で開発したときの拡張子slnファイルが拡張子dswに該当するということと、おそらく先輩はアルゴリズム計算部分はVCで書いて、GUIの方はVBで書いたということくらいしか分かっていません。また、アプリのソースコードが入っているフォルダには[bin][src][include][lib][vb]といったフォルダがあり、[src]の下層にはまたソースコードが大量に入ったフォルダがあり、[bin]にはバイナリファイル、実行exeファイルが大量に入っています。[vb]にはVBで記述されたソースらしきものが入っています。 以上が背景なのですが、ソフトに詳しい方に幾つか質問させてください。 (1)このソフトを改造したいとすれば、具体的にどういう手順で改造すればよいですか? (2)VCの方はdswファイルについてビルドすればコンパイルされ、[bin]にexeが出来る?のですが、VBの方はコンパイル出来ません。なぜでしょうか? (3)このような異なる大量なexeファイルを、ひとつのアプリケーションとして構築するのはどうすれば良いのですか?これらのexeファイルは一つ一つがモジュール?であり、それらを結合する…といった理解でいいのでしょうか? (4)このVisual Studio 6.0で作られたソースを、現在フリーでダウンロードできるVisual Studio 2008 Express Editionに移行して改造することは、容易にできるでしょうか? 他にもたくさん疑問はあるのですが、とりあえず以上4つの疑問にお答え頂ける方がおりましたらご教授下さい。

  • VC++2005 Form1とForm2のデータのやりとり

    現在VC++2005でプログラムをしています。 そこでForm1で表示されているテキストボックスの中身をForm2のテキストボックスに表示するのはどのようにすればよいのでしょうか? ちなみに、Form2の表示は下記のプログラムで行っています。 ―Form1.hの内容― #include "Form2.h" Form2^ newMDIChild = gcnew Form2(); newMDIChild->Show(); ―Form2.hの内容― this->Hide(); というので表示を消しています。 初歩的な質問だと思いますがよろしくお願いします。