2013年12月12日 星期四

讓VM中的WIN2008 SERVER 不關機增加硬碟空間

1.先在VM上將win2008的磁碟空間設定設為更大的空間

2.在命令提示字元上按右鍵,以系統管理員身份開啟

3.輸入以下指令

 DISKPART

 LIST DISK

 SELECT DISK 磁碟編號     EX: SELECT DISK 1

 LIST PARTITION

 SELECT PARTITION  分割區編號   EX:SELECT PARTITION  1

 EXTEND

4.磁碟容量已在不停機的狀態下增加

5.依以下的win 2008操作路徑進行操作 開始->系統管理工具->電腦管理->磁碟管理

對著目標磁碟機點選右鍵 選取延伸磁碟區 > 下一步 > 完成

即可完成不關機狀態下直接增加硬碟空間,而且不需重新格式化。


資料來源:http://it.mlc.edu.tw/index.php/2012-03-24-08-48-16/2012-03-24-08-49-02/42-win/51-vm-win2008

2013年8月16日 星期五

Delphi 的 Utf-8 轉換

使用Delphi6以上版本有AnsiToUTF8可用

Delphi5以下可使用

http://blog.teatime.com.tw/1/post/419

 提供的方案轉編碼



unit util_utf8;

interface

uses Windows;

type
  UTF8String = AnsiString;

  function AnsiToWide(const S: AnsiString): WideString;
  function WideToUTF8(const WS: WideString): UTF8String;
  function AnsiToUTF8(const S: AnsiString): UTF8String;
  function UTF8ToWide(const US: UTF8String): WideString;
  function WideToAnsi(const WS: WideString): AnsiString;
  function UTF8ToAnsi(const S: UTF8String): AnsiString;

implementation

function AnsiToWide(const S: AnsiString): WideString;
var len: integer;
    ws: WideString;
begin
Result:='';
if (Length(S) = 0) then
  exit;
len:=MultiByteToWideChar(CP_ACP, 0, PChar(s), -1, nil, 0);
SetLength(ws, len);
MultiByteToWideChar(CP_ACP, 0, PChar(s), -1, PWideChar(ws), len);
Result:=ws;
end;

function WideToUTF8(const WS: WideString): UTF8String;
var len: integer;
    us: UTF8String;
begin
Result:='';
if (Length(WS) = 0) then
  exit;
len:=WideCharToMultiByte(CP_UTF8, 0, PWideChar(WS), -1, nil, 0, nil, nil);
SetLength(us, len);
WideCharToMultiByte(CP_UTF8, 0, PWideChar(WS), -1, PChar(us), len, nil, nil);
Result:=us;
end;

function AnsiToUTF8(const S: AnsiString): UTF8String;
begin
Result:=WideToUTF8(AnsiToWide(S));
end;

function UTF8ToWide(const US: UTF8String): WideString;
var len: integer;
    ws: WideString;
begin
Result:='';
if (Length(US) = 0) then
  exit;
len:=MultiByteToWideChar(CP_UTF8, 0, PChar(US), -1, nil, 0);
SetLength(ws, len);
MultiByteToWideChar(CP_UTF8, 0, PChar(US), -1, PWideChar(ws), len);
Result:=ws;
end;

function WideToAnsi(const WS: WideString): AnsiString;
var len: integer;
    s: AnsiString;
begin
Result:='';
if (Length(WS) = 0) then
  exit;
len:=WideCharToMultiByte(CP_ACP, 0, PWideChar(WS), -1, nil, 0, nil, nil);
SetLength(s, len);
WideCharToMultiByte(CP_ACP, 0, PWideChar(WS), -1, PChar(s), len, nil, nil);
Result:=s;
end;

function UTF8ToAnsi(const S: UTF8String): AnsiString;
begin
Result:=WideToAnsi(UTF8ToWide(S));
end;

end.

該方案有一個小小的bug

就是WideToUTF8 回傳的結果最後會加上一個換行符號

 造成轉碼後的結果可能會跟預期不一樣。

最後可使用 S:= copy(S,0,Length(S)-1);

以修正預期產出之結果。