--------(--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2011-05-23(Mon)

《BCB(C++ Builder)》ファイルを削除する

ファイル削除には"DeleteFile"関数を用います。

(例)
.
.
.
AnsiString filename;
bool result;

result = DeleteFile(filename);

.
.
.
return result;



ちなみに、"DeleteFile"はWin32APIで、引数は削除したファイル名、返却値は削除失敗で0が返ります。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

2010-09-12(Sun)

《BCB(C++ Builder)》文字列から改行文字を取り除く

ファイルから一行読み込みをした際、処理次第で改行文字も一緒に取り込んでしまいます。
しかし、改行文字が残されている場合、文字列操作に不都合が生じる可能性があります。

そこで、文字列内にある改行コードを取り除くには以下のコードを使用します。

<コード例>
AnsiString string = "abc\ndef"; //AnsiString1文字列
string = StringReplace(string,"\n","",TReplaceFlags()<<rfReplaceAll);
string = StringReplace(string,"\r","",TReplaceFlags()<<rfReplaceAll);


<説明>
StringReplace関数
StringReplace(const AnsiString S, const AnsiString OldPattern, const AnsiString NewPattern, TReplaceFlags Flags);

 この関数は文字列から特定の文字を置換した文字列を返却します。
 [引数]
  第一引数:元の文字列を指定します。
  第二引数:検索する文字列を指定します。
  第三引数:置換したい文字列を指定します。
  第四引数:検索オプションを指定します。
  rfReplaceAllが含まれていた場合、元の文字列内すべてに対して置換処理を行ないます。含まれていない場合、最初に見つかった第二引数の文字列に対して置換処理を行ないます。
  また、 rfIgnoreCaseが含まれていた場合、大文字小文字の区別無しに置換します。

特にこだわりのない場合、上記コード例を使用すれば改行を取り除くことができます。

テーマ : プログラミング
ジャンル : コンピュータ

2010-05-22(Sat)

《BCB(C++ Builder)》Filectrlのリンク時エラー対処法

FileCtrl.hppをインクルードしたプロジェクトに対して、「実行時パッケージを使って構築」のチェックを外して構築を行った際にリンカエラーを起こすことがあります。
以下の手順でエラーに対処できます。

(1)「オプション」→「リンカ」→「共有 RTL DLL を使う」のチェックを外す。
(2)対象のプロジェクトを一度閉じて、"プロジェクト名.bpr"をテキストエディタ等で開き、<SPARELIBS value="*****"/>の項目を探す。****に半角空白で区切り「VCLX50.lib」と記入して保存。
(3)プロジェクトを開いて再構築

これでエラーがなくなるはずです。

テーマ : プログラミング
ジャンル : コンピュータ

2010-05-22(Sat)

《BCB(C++ Builder)》FormCreate内でアプリケーションを終了する

FormCreateイベント内ではClose()でアプリケーションを終了することができません。
終了したい場合はApplication->Terminate()を使用すれば終了できます。
2010-05-09(Sun)

《BCB(C++ Builder)》ディレクトリ内のファイル一覧を取得する

適当なイベントを受けてフォルダ内のファイル一覧をリストボックスに書きだします。
また、書き出す際にディレクトリとファイルの判別を行います。

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TSearchRec Sr;  //TsearchRec型の変数を用意
  AnsiString path = Form1->Edit1->Text + "\\*.*";  //Edit1に入力されたパスを設定し、ディレクトリ探査用に"\\*.*"を結合
  int Attributes = faAnyFile;  //ファイルの属性を設定

 Form1->ListBox1->Items->Clear();  //ListBoxの内容を一度クリアする

 if(FindFirst(path, Attributes, Sr) == 0){
   do {
    if((Sr.Attr & Attributes) == Sr.Attr) {      //Attributesと設定した属性か判定
     if((Sr.Attr & faDirectory) == faDirectory){  //ディレクトリかどうか判定
      if(Sr.Name != '.' && Sr.Name != "..")      //"."、".."ディレクトリの回避
       ListBox1->Items->Add("[dir] "+Sr.Name); //ディレクトリの処理
      }else{
       ListBox1->Items->Add(Sr.Name);       //それ以外(ファイル)の処理
      }
    }
   }while (FindNext(Sr) == 0);
  FindClose(Sr);
  }
}


<説明>
TSearchRec Sr;
 ファイル情報を定義する構造体TSearchRecを宣言します。

int Attributes = faAnyFile;
 検索したいファイルの属性を指定する。指定できるファイルの属性は以下の通り。
  faRadOnly・・・読み出し専用ファイル
  faHiden・・・非表示ファイル
  faSysFile・・・システムファイル
  faVolumeID・・・ボリュームファイル
  faDirectory・・・ディレクトリファイル
  faArchive・・アーカイブファイル
  faAnyFile・・・すべてのファイル

"\\*.*"
 指定されたパスの"内部"にある全てのファイルを探索するために指定する。なお、この指定をしなくてもこの次に出てくるFindFirstの第一引数で、例えば"C:\\*.*"と直接指定してもよい。

if(FindFirst(path, Attributes, Sr) == 0){
 FindFirst関数はファイルの検索に成功した場合は0を、失敗した場合はエラーを返すためにif文で処理を決定する。
 FindFisrt関数の第一引数はAnsiString型で検索するパス・名前を指定する。全てのファイルの場合は*.*とする。第二引数はAttributesで指定した属性。第三引数は検索レコードを受け取る変数を指定する。

if((Sr.Attr & Attributes) == Sr.Attr) {
 取得した属性と視程した属性が一致しているか判定する。

if((Sr.Attr & faDirectory) == faDirectory){
 同様に取得した属性がディレクトリかどうか判定する。

if(Sr.Name != '.' && Sr.Name != "..")
 取得したファイル名が"."".."であるか判定する。

while (FindNext(Sr) == 0);
 FindFirstで指定したものと同じパス・名前、属性に一致する次のエントリを検索して引数に返す。エントリが見つかった場合は0を返し、見つからなかった場合はエラーを返すため、do-while式を用いて処理をループさせればディレクトリ内部の探査ができる。

FindClose(Sr);
 クローズしてメモリを開放する。

テーマ : プログラミング
ジャンル : コンピュータ

カテゴリ
検索フォーム
RSSリンクの表示
リンク
お問い合わせ

名前:
メール:
件名:
本文:

ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。