バッチファイルの処理を使って、様々な言語(中国語やキリル文字)や、あまりファイル名としては見られないような(^や%など)記号が含まれるファイルやフォルダについて
検索や、リネーム処理をするバッチファイルを作っていたのですが
どうも上記のような、記号を含む文字や、キリル文字を含むフォルダ名ファイル名、また長すぎるパスが存在するとうまく動きません
おそらくコマンドプロンプトがShift_JISしか扱えないのと、%に関しては変数の展開が関係していると思うのですが…
そこで、この機会にC++のコマンドラインによる実行でそういう例外的な文字列の時も対応してファイル操作ができる
プログラムを組みたいと思うのですが
何分無知で申し訳ないのですが
C++もコマンドプロンプト上で動く以上、Shift_JISに起因する問題に対処できず、バッチファイルの処理と同じように特殊な文字で
動作が不安定になってしまったりするのでしょうか?教えて下さい
Visual Express をインストールして、Windows アプリケーションについて多少調べて、その内部で特殊文字(Shift_JISに出ない文字や記号)の代入と出力
を試してみたところ、うまくいくようなので、もしコンソールアプリケーションで出来ないのであればWindowsアプリケーションの勉強をしようと思っています
また、Visual ExpressでC++のプログラムを組む時
コンソールアプリケーションと
Windowsアプリケーションを作る時文法が微妙に違うのはどうしてですか?
たとえば文字型の変数の宣言に
コンソールアプリケーションだと
String ○○;ですがWindowsアプリケーションだと^を付けないといけなかったり
同じC++なら文法も同じような気がするのですが?
的外れな質問をしていたらごめんなさい
ちなみに、バッチ処理で作ろうと思っていたプログラムは
”ドライブDから、画像ファイル(jpgと仮定)以外のファイル及びフォルダを含まないフォルダ(中に画像ファイルしか含んでいないフォルダ)”を探査して条件に一致する全てのフォルダ(イメージファイルしか入っていないフォルダ)を(D\picturefolder)へ移動、もちろんサブフォルダも含めて全フォルダに関して”
というものです、特殊文字の問題以外はクリアできたのですが・・・
No.1ベストアンサー
- 回答日時:
C言語の良い所は「文字列は、文字列の中の文字コードに依存しない」って所。
文字列の中に%や^や?や*があろうが、非読文字の制御コードがあろうが、中身は気にしないのです。
>記号を含む文字や、キリル文字を含むフォルダ名ファイル名、また長すぎるパスが存在するとうまく動きません
この原因は「シェル(cmd.com)が、文字列を勝手に解析して、余計な事をするから」です。
前に別質問で回答したような気もしますが(違ってたらごめんなさい)「forとcallを併用すると、cmd.comが引数解析を2回行うので失敗する」と書いたように、引数解析はcmd.comがやっています。
>C++もコマンドプロンプト上で動く以上、Shift_JISに起因する問題に対処できず、バッチファイルの処理と同じように特殊な文字で動作が不安定になってしまったりするのでしょうか?教えて下さい
特殊文字の影響を受けるのは「main関数に渡されてくる引数のみ」です(cmd.comが引数の中身を作るので、cmd.comが加工し終わった文字列が渡されてきてしまう)
「main関数に渡されてくる引数を使わない」のであれば、一切、影響を受けません。
>コンソールアプリケーションと
>Windowsアプリケーションを作る時文法が微妙に違うのはどうしてですか?
異なるライブラリを使うからです。
>同じC++なら文法も同じような気がするのですが?
文法はまったく同じですよ。
「ヘッダファイルで定義されている識別子の名前が違うだけ」です。
なお、C、C++に用意されている「ファイル操作系ライブラリ」は、シングルバイト文字列用(ファイル名にシフトJISをサポート)、シングルバイトを拡張したワイド文字列用(ファイル名にシフトJISをサポート)、マルチバイト文字列用(ファイル名にUNICODEをサポート)など、ファイル名の文字コードに合わせたファイルライブラリがあるので、用途に合わせて使用して下さい。
繰り返しますが「文字列の中身は言語に依存しない」ので、プログラマ側で「この中身の文字コードはコレの筈」ってのを自前で管理しなければなりません。
C言語の文字列ってのは「単なるバイトデータの並び」に過ぎず、中身の文字コード体系は「プログラマ任せ」ですから。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Excel(エクセル) ファイル一覧表を使ったファイルの移動 5 2022/08/10 15:37
- Visual Basic(VBA) batにて、異なるフォルダの同名ファイルを参照し、文字列を判別。擬似配列で変数へ格納 3 2022/04/10 03:37
- Android VBA、フォルダのパスに環境文字 ㉑ があり、VBAが機能しません。 2 2022/07/27 09:16
- Excel(エクセル) 【VBA】フォルダAにある2つのファイルの内1つを、フォルダBへ。もう1つを、フォルダBへ移動したい 6 2022/07/26 08:51
- フリーソフト テキストファイル内を検索したい 1 2022/06/01 08:33
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
windowsでテキストファイルの各...
-
【マクロ】ファイル名の日付に...
-
保存先のフォルダ名を指定した...
-
パス名に2バイト文字(マルチバ...
-
ファイル名と同名のフォルダを...
-
VBA 最新のフォルダ取得
-
Windows10でコマンドプロンプト...
-
EXPLORERで開いているフォルダ...
-
フォルダーの属性変更
-
Excelで指定したフォルダに保存...
-
aaaってフォルダを作ったことな...
-
Javaでフォルダ複数階層のZipフ...
-
デスクトップの画像をhtmlに表...
-
ツリービューを使って、エクス...
-
同一フォルダ内の別ブックから...
-
エクセル VBA Filename:=Left(T...
-
VB6.0 SHCreateDirectoryExの...
-
【EXCELマクロ】サブフォルダ内...
-
C言語のコンパイラーとは?
-
フォルダのサイズを取得したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
windowsでテキストファイルの各...
-
VBA 最新のフォルダ取得
-
ファイル名と同名のフォルダを...
-
デスクトップの画像をhtmlに表...
-
VBA フォルダ名に特定の文字を...
-
Excelのハイパーリンクについて...
-
フォルダ内のPDFファイル名を変...
-
Excelで指定したフォルダに保存...
-
会社のネットワーク上のファイ...
-
【マクロ】ファイル名の日付に...
-
保存先のフォルダ名を指定した...
-
多量のファイルをフォルダに自...
-
パス名に2バイト文字(マルチバ...
-
ディレクトリ名変更してコピー...
-
C ファイル出力で、フォルダが...
-
Access VBA で フォルダ権限...
-
サーバ内のフォルダ名と各フォ...
-
フォルダにリンクを貼りたい
-
vbsで選択ダイアログを表示した...
おすすめ情報