xxx.iniファイルのデータ消去について

このQ&Aのポイント
  • アプリ終了時にデータを書き込むため、書き込み前にデータを消去したい
  • 特定の関数を使用してデータを消去する方法を知りたい
  • 書き込み時に発生する不具合を解決したい
回答を見る
  • ベストアンサー

xxx.iniファイルのデータ消去について

よろしくお願いいたします。 アプリ終了時にWritePrivateProfileString(aaa,"X",szBuffer,"d:\\kado.ini");を使ってデータを書きこんでいます。 書きこむデータ数が一定ではないため、書きこむ前にデータを一旦消去したいのですが、そのような関数はあるのでしょうか? ご存知でしたらお教えください。 # 今は通常のファイルオープン if((fout=fopen("d:\\kado.ini","w"))==NULL) ・・・ で処理をしているのですが、WritePrivateProfileStringでの書きこみが出来るときと出来ないときが繰り返しで発生する不具合が生じています。

質問者が選んだベストアンサー

  • ベストアンサー
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

消去じゃなくて いったんファイルを削除してから 新規作成すればいいのでは?

VitaminBB
質問者

お礼

回答ありがとうございます。 そうですね。考え方としてはファイル削除のほうがシンプルかもしれません。 やってみましたが、不具合現象は変わりませんでした。 どうもファイル削除やデータ消去と不具合は関係がなさそうです。

関連するQ&A

  • ファイル中のデータの読むとき・・・・

    こんにちは。ファイルにあるテキストデータを用意してそれを読み込んでいって、処理をするというプログラム書いてるんですけど、たとえば 大まかな構造として、 int fncCheck(char*pch,char item) { int count=0; int i=0; for(i=0;i<strlen(pch);i++) {if(pch[i]==item) { count++; } } return count; } int main() { FILE *fin,*fout;  //ここでいろいろ宣言 if((fin=fopen("Thermoplasmaacidophilum ","r"))==NULL) { cout<<"No files exist in current directory!\n"; exit(-1); } if((fout=fopen("Thermoplasmaacidophilum _out","wb"))==NULL) { cout<<"Output file can't open!\n"; exit(-1); } if((fin=fopen("Thermoplasmaacidophilum ","r"))!=NULL) { fwrite(SMF_header,14,1,fout); fwrite(SMF_firsttrack,36,1,fout); fwrite(SMF_track,13,1,fout); do {    //ここにdoに関する処理 } while(numread==100); while(c=fscanf(fin,"%c",c)!=EOF) {   //ここに処理をずらずら } printf("There are %d bases!!\n",n); fclose(fin); fclose(fout); } return 0; } ・・・のように書くと、一つ目のdo-while文は実行されるんですが、二つ目のwhile文が実行されません。一回目でファイルのデータを最後まで読んでるので、元にもどってもう一回やってくれないんでしょうか?初心者なものでそこらへんがよくわかんないんですが・・。どなたか助けてください。

  • ファイルの入出力を行って文字を変換する

    入力するファイルにa~zを記入しておき、 出力するファイルにaなら1、bなら2、zなら26に変換させたいのですがどうしたらよいでしょうか? #include <stdio.h> #include <string.h> #define DELIMITER "/ ," /* 区切り文字 */ int main(void) { FILE *fin,*fout; int count=0; int i; char s[256], s2[256]; char alpha[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; int kazu[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26}; char *taken; char *strch[50]; if( (fin=fopen("file1.txt","r"))==NULL) { printf("入力ファイルがオープンできません\n"); exit(EXIT_FAILURE); } if( (fout=fopen("file2.txt","w"))==NULL) { printf("出力ファイルがオープンできません\n"); exit(EXIT_FAILURE); } while(fgets(s,256,fin)!=NULL) { while (token != NULL) { strch[count]=token; token = strtok(NULL, DELIMITER); count++; } memset(s2, NULL, sizeof(s2)); fprintf(fout,"%d\n",s2); } fclose(fin); fclose(fout); return 0; }

  • ファイル入出力で

    現在ファイル入出力の項目をしているのですが、以下の内容で実行すると エラーが出てどうしても実行できません。主にどこを直せばいいのでしょうか? /* ファイルをコピーするプログラム */ #include <stdio.h> int main(void) { FILE *fin, *fout; char infile[40], outfile[40]; char str[256]; printf("コピー元ファイル = "); scanf("%39s", infile); printf("コピー先ファイル = "); scanf("%39s", outfile); if( (fin = fopen(infile, "r") ) == NULL) { printf("Input file open error.\n"); return 1; } if( (fout = fopen(outfile, "w") ) == NULL) { printf("Output file open error.\n"); fclose(fin); return 1; } while(fgets(str, sizeof(str), fin) != NULL) { fputs(str, fout); } fclose(fin); fclose(fout); return 0; } エラーは FILE 、fin, fout,NULLの未定義です。 よろしくお願いします。

  • コマンドラインから引数を渡すことについて

    ----------------------------------------------- #include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[ ]) { FILE *fin,*fout; char ss[256]; if(argc != 3){ printf("引数の数が違います\n"); exit(1); } if((fin=fopen(argv[1],"r"))==NULL){ printf("入力ファイルをオープンできません\n"); exit(1); } if((fout=fopen(argv[2],"w"))==NULL){ printf("出力ファイルをオープンできません\n"); exit(1); } while(fgets(ss,256,fin)!=NULL){ fputs(ss,fout); } fclose(fin); fclose(fout); return 0; } ----------------------------------------------- 以上のプログラム名は「tcopy.cpp」でコマンドプロンプトから実行し、ファイルをコピーするという事を行っていきます。 「aaa.txt」と「bbb.txt」の2つを用意し、「aaa.txt」の内容、 abcdef ABCDEF 012345 を「bbb.txt」にコピーしていきます。 そこで疑問なのですが、ファイルをコピーする際、コマンドプロンプトから、 >tcopy aaa.txt bbb.txt と打ち込むとコピー出来るようであり、「tcopy」、「aaa.txt」、「bbb.txt」が引数になるという事なのですが、何故この3つが引数になるのかという事と、 int main(int argc,char *argv[ ]) のargcに引数が何故代入されるかが分かりません。 後、「aaa.txt」と「bbb.txt」がargv[1]とargv[2]に何故対応しているかが分かりません。 教えていただければ嬉しいです。

  • WritePrivateProfileStringについて

    下記コードをOnMouseMove()に記述すると、ちゃんとiniファイルが作成されますが、OnLButtonUp() 内では作成されません。 どうしてなのか教えていただきたいです。 OnLButtonUp() でiniファイルが作成されるようにするにはどうすれば良いでしょうか? どうぞよろしくお願いいたします。 ************************ void CMyWnd::OnMouseMove(UINT nFlags, CPoint point) { // *********ウインドウを移動するたびにウィンドウ位置を保存 int nX,nY;//ウィンドウの左上の座標を格納する変数 WINDOWPLACEMENT wp;//WINDOWPLACEMENT構造体 char szBuffer[32];//キーの値を格納する char aaa[10]; wp.length = sizeof(WINDOWPLACEMENT); GetWindowPlacement(&wp); nX = wp.rcNormalPosition.left; nY = wp.rcNormalPosition.top; wsprintf(aaa,"%d",nn); wsprintf(szBuffer,"%d",nX); WritePrivateProfileString(aaa,"X",szBuffer,"d:\\kado.ini"); wsprintf(szBuffer,"%d",nY); WritePrivateProfileString(aaa,"Y",szBuffer,"d:\\kado.ini"); nn--; CWnd::OnMouseMove(nFlags, point); }

  • ファイルの入出力を行っての文字列反転

    入力した文字列を反転させて出力したいのですが どうしたらよいでしょうか? #include <stdio.h> #include <stdlib.h> #include <string.h> /* 定数 */ #define DELIMITER "/ ," /* 区切り文字 */ int main(void) { FILE *fin,*fout; char infile[40],outfile[40],s[256],s2[256]; char *token; char *strch[50]; int count = 0; int i; printf("入力ファイル名="); gets(infile); printf("出力ファイル名="); gets(outfile); if( (fin=fopen(infile,"r"))==NULL) { /* 入力ファイルオープン */ printf("入力ファイルがオープンできません\n"); exit(EXIT_FAILURE); } if( (fout=fopen(outfile,"w"))==NULL) { /* 出力ファイルオープン */ printf("出力ファイルがオープンできません\n"); exit(EXIT_FAILURE); } while(fgets(s,256,fin)!=NULL) { /* 入力ファイルから読み込んだデータを */ token = strtok(s, DELIMITER); while (token != NULL) { strch[count] = token; token = strtok(NULL, DELIMITER); count++; } for(i = count; i > 0; i--) { strcat(s2, strch[i]); } fputs(s2,fout); /* 出力ファイルに書き込み */ } fclose(fin); /* 入力ファイルクローズ */ fclose(fout); /* 出力ファイルクローズ */ return 0; }

  • ファイル操作

    コマンドライン引数から、データを入力し、入力データ中の数字を'*'文字で置き換え、それ以外の文字をそのまま出力させるプログラムを作るため #include<stdio.h> int main(int argc, char *argv[]){ FILE *fpi,fpo; char ch; if(argc!=3) { fprintf(stderr, "Illegal number of argument.\n"); return(-1); } if((fpi=fopen(argv[1],"r"))==NULL) { fprintf(stderr, "Can't open input file <%s>.\n", argv[1]); return(-1); } if((fpo=fopen(argv[2],"w"))==NULL){ fprintf(stderr, "Can't open output file <%s>.\n", argv[2]); return(-1); } while((ch=fgetc(fpi))!=EOF){ if(ch>=0 && ch<=9){ ch='*'; } } fclose(fpi); fclose(fpo); return 0; } のようなプログラムを書いたのですが、 if((fpo=fopen(argv[2],"w"))==NULL)がimcompitable types in assigment fclose(fpo);がimcompitable types for arguments1 of 'fclose' というようなエラーが出ます。 なぜか教えていただけませんか? また、その他、足りないところがあれば教えていただけませんか?

  • iniファイル操作

    VB6.0について質問です。 iniファイルの操作で手詰まりましたのでお知恵をおかしください! VBからiniファイルのパスを読み取りそこへデータを保存するという一連です。 実現したいことはiniファイルで指定したドライブに パス名のフォルダが存在しない場合はその指定されたフォルダを作成したい。 ということです。 少々ややこしいですがお願いします>< 現在、以下のソースで実行処理を行っていますがうまくいきません。 iniファイルに指定されたドライブにパス名のフォルダがあるか 判断するにはどうしたらいいでしょうか? wordini = INIfile_read("host", "path") If Dir(wordini)="" Then MkDir wordini End If File1.Path = wordini iniファイルのパスは D:\abc

  • ファイルオープン

    MFCのVC++6.0を使用しています。 ファイルオープンのことなんですが FILE *f; char buf[2000]; if((fopen("C:●●,"w"))==NULL)){ MessageBox("ファイルオープンエラー"); } while(fgets(buf,1000,f)!=NULL{ //処理 } fclose(f); } などで例えばリストボックスにファイルの内容を書き出したり はできます。 私の行いたいことはそのままファイルを開くということです。 例えばエクセルなどのファイル○○.XLSなどを開いたときに何かを 媒体にせずにそのまんま新ウィンドウでエクセルとしてファイルを 開くということです。どうすればいいのか調べてもわかりません。 教えて下さい。

  • C#でiniファイルの書き込みがうまくいきません。

    C#初心者です。今回INIファイルを生成→書き込みを行うためのソースコードを書いたのですが、空ファイルの生成はうまくいくのにINIファイルへの書き込みがうまくいかず、空ファイルのままになってしまいます。なぜでしょうか? 以下ソースコード using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.Runtime.InteropServices; namespace Loei_Server_ { /* ネットで公開されていたINIファイルに関するクラス。 難しいことは考えちゃアカン。 */ class IniFileHandler { [DllImport("KERNEL32.DLL")] public static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, uint nSize, string lpFileName); [DllImport("KERNEL32.DLL", EntryPoint = "GetPrivateProfileStringA")] public static extern uint GetPrivateProfileStringByByteArray(string lpAppName, string lpKeyName, string lpDefault, byte[] lpReturnedString, uint nSize, string lpFileName); [DllImport("KERNEL32.DLL")] public static extern uint GetPrivateProfileInt(string lpAppName, string lpKeyName, int nDefault, string lpFileName); [DllImport("KERNEL32.DLL")] public static extern uint WritePrivateProfileString( string lpAppName, string lpKeyName, string lpString, string lpFileName); } class Program { static void Main(string[] args) { /* 日付を取得。 */ DateTime this_time = DateTime.Now; /* 多重起動するとマズイので多重起動していたら強制的に終了する。*/ if (System.Diagnostics.Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess().ProcessName).Length > 1) { Console.WriteLine(" [Error] " + "[" + this_time.ToString() + "] Application already has started. This program is on the nature, you can not multi-boot."); return; } /* コンフィグデータの確認。なかったら勝手に生成する。 */ if (!File.Exists("Config.ini")) { Console.WriteLine(" [Warning] " + "[" + this_time.ToString() + "] Config.ini file could not be found. I created you."); /* 空のINIファイルを生成。 */ StreamWriter writer = new StreamWriter("Config.ini", true); /* 生成したINIファイルにいろいろ書き込む。 */ IniFileHandler.WritePrivateProfileString("Loei_Server_", "TCP_IP", "localhost", "Config.ini"); IniFileHandler.WritePrivateProfileString("Loei_Server_", "TCP_HOST", "25565", "Config.ini"); Console.WriteLine(" [Info] " + "[" + this_time.ToString() + "] It has generated an Config.ini file!"); }

専門家に質問してみよう