C中對與一個固定的資料結構儲存很方便。
struct USERINFO
{
int ID;
char USERNAME[10];
char PASSWORD[15];
char MAIL[10];
}typedef USERINFO;
USERINFO UserInfo;
ZeroMemory(&UserInfo,sizeof(UserInfo));
UserInfo.ID = 1;
strcat(UserInfo.USERNAME,"wan_dou");
strcat(UserInfo.PASSWORD,"password");
strcat(UserInfo.MAIL,"wan_dou@citiz.net");
FILE *fp = fopen("c:/x.txt","w");
fwrite(&UserInfo,sizeof(UserInfo),1,fp);
fclose(fp);
就將儲存一個使用者的資訊。如果一個變數或數組的輸入低於給他的輸入就自動補空,所以取出更方便
fread(&UserInfo,sizeof(UserInfo),1,fp);
但PHP中好象沒有STRUCT的支援,而CLASS用相同的操作的話一定是錯誤的。
所以只有自己來類比一個結構了。
下面就是一個不太成熟的結構了,最討厭的就是不能支援變動長度的資料。
<?
define("UserInfoPath","data/UserInfo");
class USERINFO
{
var $UserInfoStruct = Array
(
"UserName" => 10 ,//定義結構
"PassWord" => 15 ,//如果是 int ,float,double 可以參考資料庫中的定義或自行設定
"Mail" => 50 ,//50:字元需要的長度,MAIL是結構名稱
);
var $UserName;//真正存放內容的變數在這裡。
var $PassWord;//
var $Mail;//,必須和結構定義的描述相同。
function checkValue($str,$n)//給定一個變數,和規定變數長度變數
{
while(strlen($str)<$n)//少補
{
$str.=' ';
}
if( strlen($str) > $n)//多退
$str = substr($str,0,$n);
}
function SaveToFile($filename)//儲存為一個檔案
{
$fp = fopen($filename,"w");//開啟
for(reset($this->UserInfoStruct);$i=key($this->UserInfoStruct);next($this->UserInfoStruct))
{
$this->checkValue(&$this->$i,$this->UserInfoStruct[$i]);//調用函數,被檢查變數提供指標地址
echo $this->$i;//我自己放的調試,可刪除。
fputs($fp,$this->$i,$this->UserInfoStruct[$i]);//寫入 $this->$i是一個指相變數的變數,如 $this->UserName,第三個參數可省,但如果加更可靠的儲存指定長度的變數。;
}
fclose($fp);//關閉
}
function LoadFromFile($filename)//從一個檔案中讀取
{
$fp = fopen($filename,"r");//開啟
for(reset($this->UserInfoStruct);$i=key($this->UserInfoStruct);next($this->UserInfoStruct))
{
$this->$i = fgets($fp,$this->UserInfoStruct[$i]);//讀出指定長度的字元到變數
echo $this->$i;//自己調試
}
fclose($fp);//關閉
}
};
/*
$UserInfo = new USERINFO;//寫
$UserInfo -> UserName ="wan_dou";
$UserInfo -> PassWord ="1981627";
$UserInfo -> Mail ="wan_dou@sina.com.cn";
$UserInfo -> SaveToFile("c:/1.txt");
$UserInfoLoad = new USERINFO;//讀
$UserInfoLoad->LoadFromFile("c:/1.txt");
echo $UserInfoLoad->UserName;
*/
?>