自分で使うアプリを少し作ろうかと思うのだが、一気にやる時間もないので、ちょろちょろパーツ単位で作って行こうと思う。C言語では意外と文字列の操作で引っかかったので、その部分を書いておく。
ドラッグ&ドロップでパスを取得し加工する
#include <stdio.h>
#include <string.h>
/* 構造体 各パスを管理 */
struct Path{
char exepath[128];
char filepath[128];
char filepathNew[128];
char inipath[128];
} path;
/* 構造体にパスを入れる関数 */
filepath(char *str0,char *str1){
/* a.exe パスをコピー */
strcpy(path.exepath, str0);
printf("filepath exepath \t%s\n",path.exepath);
/* 新規ini用パスを作る*/
strcpy(path.inipath, path.exepath);
/* \0を入れて exe path から a.exe を切り捨てる */
*(path.inipath + (strlen(path.inipath) - 5)) = '\0';
/* 連結 */
strcat(path.inipath, "hpf.ini");
printf("filepath ini filepath \t%s\n",path.inipath);
/* ファイルパスを構造体へ */
strcpy(path.filepath, str1);
printf("filepath filepath \t%s\n",path.filepath);
/* 新規ファイルパスを作る */
strcpy(path.filepathNew, path.filepath);
/* ドット以下を切り捨てる */
strtok(path.filepathNew,".");
printf("filepath file cut \t%s\n",path.filepathNew);
/* 連結 */
strcat(path.filepathNew,"_new.wav");
printf("filepath newfile \t%s\n",path.filepathNew);
}
/* メイン関数 */
int main(int argc, char **argv){
printf("&argv[0] \t%s\n",argv[0]);
printf("&argv[1] \t%s\n\n",argv[1]);
/* 引数を渡す */
filepath(argv[0],argv[1]);
printf("\nmain exepath \t%s\n",path.exepath);
printf("main filepath \t%s\n",path.filepath);
printf("main newfile \t%s\n",path.filepathNew);
printf("main ini \t%s\n",path.inipath);
getchar();/* 一時停止 */
return 0;
}
|
コンパイルした a.exe に適当なファイルをドラッグ&ドロップすると、以下のような表示をする。表示している内容は、a.exe自身の絶対パス、ファイルの絶対パス。あとは、a.exeと同じ階層に設置予定の設定ファイル hpf.ini の絶対パスをa.exeのパスから作り出す。またファイルを加工して新規にファイルを保存したいので、ファイルの絶対パスを加工して、新規ファイルの絶対パスを作り出す。
どういう方法がよいのか分からないので、現状の知識で適当に作ってみた。パスは構造体に保存して、他の関数からもアクセスすることを前提としている。構造体には、はじめポインタで文字列を扱っていたが、加工するとうまく行かなかった。とりあえず配列にして、大きさを指定することで問題が起きなくなった。ポインタの解釈がちゃんと出来ていないと痛感。
&argv[0] C:\a.exe
&argv[1] C:\16bit_stereo.wav
filepath exepath C:\a.exe
filepath ini filepath C:\hpf.ini
filepath filepath C:\16bit_stereo.wav
filepath file cut C:\16bit_stereo
filepath newfile C:\16bit_stereo_new.wav
main exepath C:c\a.exe
main filepath C:c\16bit_stereo.wav
main newfile C:c\16bit_stereo_new.wav
main ini C:c\hpf.ini
|
C言語 ANSI C89 Meadow & MinGW GCC 目次