フルパスのファイル名を参照し、フォルダが無ければ作成するというプログラムを作成したいのですが、漢字も混在していて、その第2コードが0x5c(\)の場合もあるため、正常に動作しません。
言語 VisualC++6.0
ファイル名(pszPath) c:\test\売上実績表\10月実績表.xls
void CFTWnd::MakePath(char* pszPath)
{
WIN32_FIND_DATA find;
HANDLE h;
char szTmp[_MAX_PATH];
UINT nLen;
UINTi;
ZeroMemory(szTmp, _MAX_PATH);
nLen = strlen(pszPath);
szTmp[0] = pszPath[0];
szTmp[1] = pszPath[1];
szTmp[2] = pszPath[2];
for( i = 3; i < nLen; i++ )
{
if( pszPath[i] != '\\' )
{
szTmp[i] = pszPath[i];
}
else
{
if( (h = FindFirstFile(szTmp, &find)) != INVALID_HANDLE_VALUE )
{
FindClose(h);
}
else
{
_mkdir(szTmp);
}
szTmp[i] = pszPath[i];
}
}
}
「表」の第2コードが0x5c(\)という事もあり、余計なフォルダが作成されてしまいます。
何か良い方法があったら教えて下さい。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
//サンプルパス
char szFullPath[] = "C:\\hoge\\表1.csv";
char szDrive[MAX_PATH], szPath[MAX_PATH], szFile[MAX_PATH], szExt[MAX_PATH];
::_splitpath(
szFullPath,
szDrive,
szPath,
szFile,
szExt
);
//パス
char szPathName[MAX_PATH];
strcpy(szPathName, strcat(szDrive, szPath));
//ファイル名
char szFileName[MAX_PATH];
strcpy(szFileName, strcat(szFile, szExt));
MakeSureDirectoryPathExists(szPathName);
(以下略)
とかね。
回答ありがとうございます。
現在、charmer29-2さんへのお礼に述べたようなエラーが発生しています。厚かましいお願いですが、何か助言を頂けないでしょうか。
よろしくお願いします。
No.5
- 回答日時:
imagehlp.libをリンクして
imagehlp.hをインクルードしていますか?
#pragma comment(lib, "imagehlp.lib")
#include "imagehlp.h"
No.3
- 回答日時:
つ[MakeSureDirectoryPathExists()]
APIを使っていいようですし、これ一発で全て終わる気がします。
お礼が遅くなりました。回答ありがとうございます。
以下のように変更し、デバッグモードでうまく動作したのでリリースモードでリビルドしたら、リンクエラーが発生しました。
何分、VC++は始めたばかりで、よく分かりません。厚かましいお願いですが、何か助言を頂けないでしょうか。
ファイル名(pszPath) c:\test\売上実績表\10月実績表.xls
#include "imagehlp.h"
void CFTWnd::MakePath(char* pszPath)
{
WIN32_FIND_DATA find;
HANDLE h;
char szTmp[_MAX_PATH];
_splitpath(pszPath, szDrive, szDir, szFname, szExt);
strcpy(szTmp, szDrive);
strcat(szTmp, szDir);
if( (h = FindFirstFile(szTmp, &find)) != INVALID_HANDLE_VALUE )
{
FindClose(h);
}
else
{
MakeSureDirectoryPathExists(szTmp);
}
}
【エラー内容】
リンク中...
FTWnd.obj : error LNK2001: 外部シンボル "__imp__MakeSureDirectoryPathExist@4"は未解決です
.\Release/Nbft.exe : fatal error LNK1120: 外部参照1が未解決です。
link.exeの実行エラー
以上、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Excel(エクセル) 2つのマクロを連続して動かしたい 3 2022/09/20 23:46
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Excel(エクセル) 【マクロ】ファイル名の日付によって、保管するフォルダを、自動選択したい 4 2023/08/16 11:24
- Excel(エクセル) 1つのファイルを3つのフォルダにファイル名を【明日の日付】にして、コピーをしたい 2 2022/12/21 17:43
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の入力した文字を反転させ...
-
配列をnビットシフトする
-
charからLPTSTRへの変換方法
-
C言語エラーについて
-
c言語
-
カラー画像からグレースケール...
-
'const char *' 型は 'char *' ...
-
C言語です
-
char* を渡したとき、不適切なP...
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語、リダイレクト
-
ひとつのプログラムにしたいの...
-
ビット演算について
-
【至急】C言語の問題です、どな...
-
文字列がNULLか空文字列かの判定
-
object型からchar型へ変換の方法
-
文字列から空白を取り除きたい...
-
C言語のsendとrecv
-
int型からchar型への変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
charからLPTSTRへの変換方法
-
charでの計算?
-
配列をnビットシフトする
-
'const char *' 型は 'char *' ...
-
型変換
-
テキストデータをそのままバイ...
-
文字列から空白を取り除きたい...
-
CStringをwchar_tに変換したい
-
絶対パスからのファイル名の切...
-
fgetsなどのときのstdinのバッ...
-
ネットワークにつながっている...
-
str系関数を使わずに二つの文字...
-
3桁区切(コンマ)記号をつけ...
-
atoi( ) の反対をやりたい
-
double型の値をchar配列に変換...
-
C言語のfor文です。 繰り返しの...
-
switch文で文字を比較すること...
-
ファイル名である文字列からbas...
-
c++ 文字列を入力して、一文字...
-
strncpyと_tcsncpy_sのヌルの扱...
おすすめ情報