
C++ の FileCopy の設定が解りません。
MicroSoftのVisual Studio 2010 の Win32CLR の C++ で書いています。
練習として、単純なファイルのコピーを作ろうとしているのですが、
FileCopy の使い方が解りません。
調べていると、FileSystemObject や FileSystem との関連があると
言う事は解ったのですが、どうすればよいのかが解りません。
????.FileCopy( "ab.txt" , "xy.txt" , True ) のようになるのかな?と思っています。
宜しくご教授下さい。
No.7ベストアンサー
- 回答日時:
> CopyFile ------ グローバルスコープに "CopyFile" が有りません
> GetLastError -- グローバルスコープに "GetLastError" が有りません
> LPCTSTR ------- 識別子"LPCTSTR" が定義されていません
> DWORD --------- 識別子"DWORD" が定義されていません
すいません。
「stdafx.h」に以下を追加してください。
#include <windows.h>
これでエラーが無くなると思います。
この回答への補足
前回の補足に一部、文字の記入ミスが有りました、すいません。
今回の#include <windows.h>を入れたら、無事に全部のエラーが消え、
コピーも、無事に出来ました。念のためコードを記しました。
// FCopy_Test_2_.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
bool ret = CopyFile((LPCTSTR)L"C:\\Test_File_1.txt" , (LPCTSTR)L"C:\\Test_File_1_cp.txt", false);
if (!ret) {
DWORD ErrNo = GetLastError();
printf("\nエラー番号::%d\n", ErrNo);
} else {
printf("\nコピー成功\n");
}
return 0;
}
上記のコードで無事に動いています。
<magicalpass>様、
大変、長らくご指導、有り難うございました。
<magicalpass>様、
当方の勘違いが色々と面倒をおかけしました。
解りやすいコードなど、大変参考/勉強になりました。
有り難うございました。
No.6
- 回答日時:
#4 です。
「CLR」って書いてあるから.NET環境だと思ってたのですが、ひょっとして「Win32コンソールアプリケーション」のことですか?
それなら、以下の感じで文字列の前に「L」を付ければ動きます。
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
bool ret = ::CopyFile((LPCTSTR)L"C:\\Download\\arc.zip", (LPCTSTR)L"I:\\Download\\arc.zip", false);
if (!ret) {
DWORD ErrNo = ::GetLastError();
printf("\nエラー番号::%d\n", ErrNo);
} else {
printf("\nコピー成功\n");
}
return 0;
}
この回答への補足
補足には「画像添付」が出来ないのですね、大変失礼しました。
「Win32コンソールアプリケーション」と「CLR」を勘違いしていました、
大変申し訳ありません。
早速、下記のように新規に作成してみました。
// FCopy_Test_2_.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
bool ret = ::CopyFile((LPCTSTR)(L"C:\\Test_File_1.txt"), (LPCTSTR)(L"I:\\Test_File_1_cp.txt"), false);
if (!ret) {
DWORD ErrNo = ::GetLastError();
printf("\nエラー番号::%d\n", ErrNo);
} else {
printf("\nコピー成功\n");
}
return 0;
}
エラーの出る所は、
CopyFile ------ グローバルスコープに "CopyFile" が有りません
GetLastError -- グローバルスコープに "GetLastError" が有りません
LPCTSTR ------- 識別子"LPCTSTR" が定義されていません
DWORD --------- 識別子"DWORD" が定義されていません
L"C:\\Test_File_1.txt" ---- ')'が必要です
L"C:\\Test_File_2.txt" ---- ')'が必要です
上記は'()'で囲ったら「')'が必要です」のエラーは消えました。
まだ、何か当方の勘違いがあるようですね?・・・・
宜しくお願いします。
No.5
- 回答日時:
#4 です
>また、「Win32 CLR」で「::」や「^」は使えるのですか?
>自分のコードの方は「cut_n = ks_sd.length();」や「File_in_2.close();」の様に
「.」(ドット)で書かないとエラーになるのですが?
>あと「^」も使えません。
それがVC++のCLR環境(C++/CLI)では普通ですが。
それ、ひょっとして、VC++じゃなくて、VC#を使ってるのではないですか?
VC#なら「::」や「^」じゃなくて「.」になりますが。
この回答への補足
念のため、新規作成時の画面を添付しました。
画面の通りに「Vc++」だと思います。新規作成をすると下記の
----------------------------------------------------------------------
// abcd.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
----------------------------------------------------------------------
上記のコードが勝手に作られています。
No.4
- 回答日時:
どうもVC++ 2010では文字列がうまく渡されないみたいですね。
次のようにMarshalクラスのStringToHGlobalUni関数を使ってファイル名の文字列を変換したら動くみたいですが……
CopyFileにANSI文字を渡さないといけないのかと思ったけど、そういうわけでもないみたいで……
#include "stdafx.h"
using namespace System;
using namespace System::Runtime::InteropServices;
int main(array<System::String ^> ^args)
{
String^str = L"\nエラー番号::";
// コピー元ファイル名
String^src_fname = L"C:\\Download\\arc.zip";
char*src_name = (char*) Marshal::StringToHGlobalUni(src_fname).ToPointer();
// コピー先ファイル名
String^ dest_fname = L"I:\\Download\\arc.zip";
char*dest_name = (char*) Marshal::StringToHGlobalUni(dest_fname).ToPointer();
bool ret = ::CopyFile((LPCTSTR)src_name, (LPCTSTR)dest_name, false);
if (!ret) {
DWORD ErrNo = ::GetLastError();
Console::WriteLine(str + ErrNo.ToString() + L"\n");
} else {
Console::WriteLine(L"\nコピー成功\n");
}
Marshal::FreeHGlobal(IntPtr(src_name));
Marshal::FreeHGlobal(IntPtr(dest_name));
return 0;
}
この回答への補足
サンプルコード、有り難うございます。
早速、新規に「Win32 CLR」で「新規プロジェクト」を作って、
「magicalpass」さんのコードをそっくり書いて試してみたのですが、
冒頭の「using namespace System;」の所で、
「error::名前は名前空間名である必要が有ります」
とのメッセージが出てしまいます。
以下、「Marshal」など、あちこちに赤いアンダー波線がでてしまいます。
また、「Win32 CLR」で「::」や「^」は使えるのですか?
自分のコードの方は「cut_n = ks_sd.length();」や「File_in_2.close();」の様に
「.」(ドット)で書かないとエラーになるのですが?
あと「^」も使えません。
どこかの設定などが合わないのでしょうか?。
ファイルのコピー以外のファイルの有無チェックや
テキストファイル内容の読み出し、変更、文字列の処理などはうまく動いています。
No.3
- 回答日時:
CLRということは.NET Frameworkを使用したコピー方法と思われます。
したがって使うべきなのはSystem.Io.FileInfo.CopyToではないかと思われます。
参考URLにはサンプルコードもありますのでご確認ください。……でも何でC++のサンプルコードがVBのところに書いてあるんだ?……
参考URL:http://msdn.microsoft.com/ja-jp/library/tsz3wx3h …
この回答への補足
お世話になります。
「.NET」が何かも解らずに「c++ win32 CLR」を書いている入門者です。
何となく、今書いているのが、
参考<http://msdn.microsoft.com/ja-jp/library/5axsfwbc …>
これを「c++」で書いているようですが?うまくいきません。
単純に「batファイル」として書き出した方が早いのでしょうか?
No.2
- 回答日時:
No.1
- 回答日時:
この回答への補足
お世話になります。
この辺は何度も見ているのですが、この通りに実行すると、
「error C3861: 'CopyFile': 識別子が見つかりませんでした」
とのエラー表示が出されます。
何かのインクルードが必要なのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 1つのファイルを3つのフォルダにファイル名を【明日の日付】にして、コピーをしたい 2 2022/12/21 17:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/02 11:48
- Excel(エクセル) 1つのファイルを複数のフォルダにファイル名を【明日の日付】にして、コピーしたい 5 2022/12/13 20:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/07/01 12:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/26 17:13
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
- C言語・C++・C# visual studio 2019 についての質問です 1 2022/09/21 09:58
- Visual Basic(VBA) エクセルVBA Workbook変数に変数を使ったファイル名を格納したい 5 2023/06/13 14:46
- C言語・C++・C# C言語について教えて欲しいです。 ファイルの中身をコピーするプログラムを作ってます aというファイル 7 2022/11/03 19:21
- Windows 10 windowsの回復ドライブや復元ポイントを使用した場合の戻る位置を教えてください。 5 2023/08/19 14:52
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
構造体の各メンバにfor文からア...
-
文字列を分解したいのですが・・・
-
プログラム
-
EUCの漢字第1バイトを判定する
-
c言語の境界調整について
-
配列をstrtokする方法
-
8進数と16進数で表示するプロ...
-
c言語でソーベルフィルタが作り...
-
charからLPTSTRへの変換方法
-
エラーの意味
-
'const char *' 型は 'char *' ...
-
atoi( ) の反対をやりたい
-
c言語のプログラミングについて...
-
puts関数やら
-
[C++]ファイル出力について
-
インラインアセンブラについて
-
wake on lan のwindowsプログラ...
-
書き込みデータのポインタのキ...
-
ビット列を走査するプログラム...
-
LCD表示の制御
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
文字列から空白を取り除きたい...
-
間接参照のレベルが異なっています
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
テキストデータをそのままバイ...
-
charからLPTSTRへの変換方法
-
atoi( ) の反対をやりたい
-
charでの計算?
-
配列をnビットシフトする
-
c++ 文字列を入力して、一文字...
-
'const char *' 型は 'char *' ...
-
c言語でユーザ関数を利用して入...
-
干支のプログラム
-
switch文で文字を比較すること...
-
char型からのバイト数取得
-
ネットワークにつながっている...
-
getchar()を int でとる理由...
-
間接操作のレベルとは
-
str系関数を使わずに二つの文字...
おすすめ情報