
レジストリのキーから値を取得し、その取得した値の中フォルダのファイルの有無を調べあるなら他のフォルダにそのファイルをコピーしたいのですがわかりません。。。レジストリのオープンとキーの取得はわかるんですが。
例 ルートキーHKEY_LOCAL_MACHINE\SOFTWARE\HRPS\BPSS
値の名前 PathName キーの値 c:\program\HRPS
このキーの値からc:\program\HRPS の中のファイル(file.c)をチェックし、あれば別のフォルダc:\program\fileの中にコピーしたいんです><
No.5ベストアンサー
- 回答日時:
>printf("%s",szPathname)で
>表示内容が「c:\program\HRPS」になりますか?
はい、そうなるはずです。
>そして連結したいときは
>strcat("szpathname",\\file.c)?
>strcat(c:\program\HRPS,\\file.c)だと自分で入力しないといけないのでどうやったらいいでしょうか><?」
>strcat(szpathname,\\file.c)
えーと、3つともハズレです。
配列と文字列とポインタは理解出来てますか?
strcatの宣言はこうなってます。
char *strcat(char *s1, const char *s2);
動作は…、
char型ポインタs1が指す文字列の末尾に
char型ポインタs2が指す文字列を連結し、
戻り値としてs1のポインタを返す。
です。
(char *s2の前に付いてるconstはs2の内容を変更出来なくするという意味です。
まぁ、気にしなくていいですね。)
なので、正解はこうなりますね。
strcat( szPathName, "\\file.c" );
※szPathNameはchar型配列szPathName[MAX_PATH]の先頭アドレスを表し、
"\\file.c"は文字列"\\file.c"の先頭アドレスを表しています。
んー、わかりずらかったらすいません。
No.4
- 回答日時:
#1です。
Win32APIを使った方法は書かれてるので、C言語のみでのアドバイスです。
1.フォルダパスを取得した後、任意のファイル名を繋げて絶対パスのファイル名とする。
難しく考えなくてもただ単なる文字列の結合です。
strcat,wsprintfなどの関数を使ったり、又は、自分で結合すればよいです。
質問者様の例を使用するなら、
c:\program\HRPSに\とfile.cを結合するだけですね。
2.別のフォルダパス+ファイル名で先にオープンしたファイルの内容をそのまま書き込み。
fopen関数を使って1で作成した絶対パスのファイルを開く。(これが失敗すればファイル無し。)
あれば、1で作成した絶対パスのファイルを開いたのとは別にもう一つコピー先のファイル名を書き込みモードで開く。
後は、先に開いた方からfread関数などで内容を読み出し、その内容をfwrite関数などで後に開いたコピー先に書き込む。
これで実現出来ると思います。
この回答への補足
聞きたいのですが
// フォルダパスの取得
DWORD dwValueType, cbPathName;
char szPathName[MAX_PATH];
HKEY hKey;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\HRPS\\BPSS", 0, KEY_READ, &hKey);
RegQueryValueEx(hKey, "PathName", NULL, &dwValueType, (LPBYTE)szPathName, &cbPathName);
RegCloseKey(hKey);
でレジストリにキーの値を取得できますがこの値を表示させたいなら
printf("%s",szPathname)で
表示内容が「c:\program\HRPS」になりますか?
そして連結したいときは
strcat("szpathname",\\file.c)?
strcat(c:\program\HRPS,\\file.c)だと自分で入力しないといけないのでどうやったらいいでしょうか><?」
strcat(szpathname,\\file.c)
No.3
- 回答日時:
こういうことでしょうか?ファイルがなければどうせコピーで失敗するので、存在確認は省きました。
char szFiles[] = "abc.dat,xyz.dat"; // コピーするファイル名一覧
char* lpszToken;
// フォルダパスの取得
DWORD dwValueType, cbPathName;
char szPathName[MAX_PATH];
HKEY hKey;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\HRPS\\BPSS", 0, KEY_READ, &hKey);
RegQueryValueEx(hKey, "PathName", NULL, &dwValueType, (LPBYTE)szPathName, &cbPathName);
RegCloseKey(hKey);
lpszToken = strtok(szFiles, ","); // カンマ区切りでファイル名を抽出
while (lpszToken)
{ // 各ファイル毎にコピー
// 新旧ファイルパスの生成
char szFilePath[MAX_PATH];
char szNewFilePath[MAX_PATH];
wsprintf(szFilePath, "%s\\%s", szPathName, lpszToken);
wsprintf(szNewFilePath, "%s\\%s", "c:\\ftproot", lpszToken);
// ファイルのコピー
if (!CopyFile(szFilePath, szNewFilePath, TRUE))
{ // エラーの場合
DWORD dwError = GetLastError();
switch (dwError) {
case ERROR_FILE_NOT_FOUND:
printf("\"%s\" not found\n", szFilePath);
break;
case ERROR_FILE_EXISTS:
printf("\"%s\" already exists\n", szFilePath);
break;
default:
printf("errorコード=%d\n", dwError);
}
}
lpszToken = strtok(NULL, ","); // 次のファイルの抽出
}
No.2
- 回答日時:
ファイルを探すには、
Win32APIのFindFirstFile
→戻り値がINVALID_HANDLE_VALUEならファイルなし
Cライブラリのfopen
→オープンできなければファイルなし
ファイルをコピーするには
Win32APIのCopyFile
ですね。
No.1
- 回答日時:
レジストリのキーからフォルダパスを取得した後、
任意のファイル名を繋げて絶対パスのファイル名として、
そのファイル名でオープン出来ればファイル有り。
オープン出来なければファイル無し。
ということで、ファイル有れば別のフォルダパス+ファイル名で先にオープンしたファイルの内容をそのまま書き込み。では駄目ですか?
この回答への補足
おはようございます。やりたいことがわかったのですがプログラムににすると
1.フォルダパスを取得した後、
任意のファイル名を繋げて絶対パスのファイル名として、2.別のフォルダパス+ファイル名で先にオープンしたファイルの内容をそのまま書き込み。
1.2がどうすればわかりません。アドバイスお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) vba レジストリの値を読み込教えてください教えてください 1 2023/07/14 14:09
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(プログラミング・Web制作) セレクトボックスで選択された値をコントローラーで使用したい 2 2022/07/26 16:41
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Excel(エクセル) 1つのファイルを複数のフォルダにファイル名を【明日の日付】にして、コピーしたい 5 2022/12/13 20:11
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Excel(エクセル) セルの値をグーグルで検索するエクセルVBAについて! 2 2022/08/01 21:41
- Excel(エクセル) 1つのファイルを複数のフォルダにファイル名を【明日の日付】にして、コピーしたい 5 2022/12/13 04:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについて。 1つ...
-
gccを行ってもexeファイルが生...
-
c言語
-
visual studio 2022でのC#プロ...
-
C# DatagridviewにExcelシート...
-
mallocについて
-
C言語って古いですか?
-
C言語関数違いについて。
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
-
パソコン
-
CPUが16bitでも32bitOSでコンパ...
-
Python、プログラミングについ...
-
だれがとけるの?
-
バッチファイルで以下のような...
-
Notepad++の関数リスト表示の変...
-
VisualStudio2022でC言語プログ...
-
License='MIT' ってなんでmitな...
-
C言語 ストリームについて。
-
c言語でイベントフラグを使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
gccを行ってもexeファイルが生...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
C++でデスクトップGUIアプリ開...
-
【C言語】全角文字の配列を、全...
-
Windows Formアプリからコンソ...
-
VisualStudio2022でC言語プログ...
-
C#でログファイルにファイルパ...
-
C#でTreeViewのCheckBoxのサイ...
-
c#のTLS1.2での通信について
-
VisualStudioでC++クラスを追加...
-
C言語について。
-
int16_t の _t は何?
-
プログラマー達は何故、プログ...
-
逆コンパイルと逆アセンブルの...
-
C言語の関数のextern宣言
-
c言語でイベントフラグを使った...
-
C言語 関数、変数の宣言について
-
[C言語]fputsとfprintfの違い
おすすめ情報