全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2801
推到 Plurk!
推到 Facebook!

請問類似Nero裡的檔案讀取Buffer要怎麼做呢?

 
martialart
一般會員


發表:6
回覆:6
積分:7
註冊:2002-06-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-08-08 03:28:06 IP:203.79.xxx.xxx 未訂閱
我想請問像Nero的燒錄軟體裡面,可以自行設定使用任意大小的記憶體空間來當檔案讀取的Buffer,其中先將檔案讀到Buffer裡,當程式要處理檔案時,直接從記憶體裡的Buffer讀取,處裡完之後,Buffer裡面該檔案會清除,然後再載入未來會處理的檔案。 請問這種功能要如何實做呢? 我一點頭緒都沒有... :( 謝謝各位大大的幫忙.... 感激不盡~~
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-08-08 20:24:12 IP:61.221.xxx.xxx 未訂閱
試試 RAMDisk程式 有異曲同功之效 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19236 不過Nero的技術應該是使用於暫存檔之方式 因為一但程式中止之後即釋放而RAMDisk程式 一但儲存之後可以再利用但是實體RAM空間必須夠大好處是夠快 你可以先試此試用版它是用VB寫的 滿好用的當win98的dos啟動之後程式就啟動了
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-08-09 09:01:17 IP:61.218.xxx.xxx 未訂閱
引言: 試試 RAMDisk程式 有異曲同功之效 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19236 不過Nero的技術應該是使用於暫存檔之方式 因為一但程式中止之後即釋放而RAMDisk程式 一但儲存之後可以再利用但是實體RAM空間必須夠大好處是夠快 你可以先試此試用版它是用VB寫的 滿好用的當win98的dos啟動之後程式就啟動了
就您的瞭解RAMdisk的原理可否介紹給大家瞭解,實作上有何困難點?
時間就是金錢---[ 發問前請先找找舊文章]
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-08-10 00:18:33 IP:61.70.xxx.xxx 未訂閱
axsoft 版主的回應 真正是讓我思考許久 先行說明討論區之用意在我個人看來討論區的功能除了 知與解惑 當然也需有另類思考 (是否與理論有沖突有時也需時間來定義) 以下個人所知但不代表完全正確 還需axsoft 版主精譬解說 1 RAMdisk的原理 簡單來說就是將記憶體的區塊分割模擬硬碟 假設256MB的記憶體分割出100MB給特定的某軟體加速使用 (實例) 1 win98se開機片 (常常看到卻很少人注意) 2 win2000開機片 3 Linux應用於嵌入式系統 當Linux的核心啟動之後 除了精減後的開機模組(約於400k) 此時核心因為已 載入記載體開始shell啟用RAMdisk將處理硬體偵測與其他模組的啟用以及相關 動態連接檔 Linux上嵌入式系統目前一共可以使用3次的壓縮技術 這也是一些 硬體商使用Linux上嵌入式系統卻只有記憶體但是卻無disk 4 顯示卡的RAM 現在的顯示卡為何可以擁有64MB 其實它的原理應該由640k第一 層 然後一層一層堆疊上去有點像蓋大型一般 (天馬行空討論1) martialart發問者:希望 1 可以自行設定使用任意大小的記憶體空間來當檔案讀取的Buffer, 2 其中先將檔案讀到Buffer裡,當程式要處理檔案時, 3 直接從記憶體裡的Buffer讀取 -------------------------------------------------------------------- 不就符合RAMdisk(我猜測的) Buffer其實與RAMdisk不同光名字就不同^-^ -------------------------------------------------------------------- (困難點討論) 1 在dos下有640k的限制 那為何win98se開機片能模擬a: 我想請axsoft 版主再為我們解說吧(因為我知的也有限) 2 以win98se系統由dos7.0開機之後 會shell載入保護模式此時的硬體設備也將 載入而原來的記憶體已在dos下 分割部份已經變成disk (不是記憶體) (天馬行空討論2) 1 RAMdisk本身並無法儲存 所以也應用檔案回存方式回寫於硬碟(這又有點像虛 擬光碟了) 2 運用於大量資料存取時 搭配磁碟陣列運用於資料庫 A將記憶體製成類似PCI插巢讓使用者可一次大量擴充記憶體 B由於將實體整個資料載入記憶體 變成一個記載體系統與共享的系統 win2000下的c:\pagefile.sys是硬碟模擬記憶體(剛剛好又相反) 我想我只知道這些 沒時間了 我要外出等axsoft 版主的回應解說 先說明我寫的只是我個人知道對與錯希望axsoft 版主不吝告知 謝謝
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
martialart
一般會員


發表:6
回覆:6
積分:7
註冊:2002-06-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-08-10 04:49:40 IP:210.201.xxx.xxx 未訂閱
我當初會問這個問題是因為在工作中碰到的一個狀況.... 公司的有一個電腦應用系統,其中有一部份是用來將檔案以磁帶備份的程式。 因為磁帶寫入的速度為 16MB/sec,而且如果讀取的資料來不及讓磁帶在捲動中寫入,則磁帶必須倒帶到中斷的地方繼續寫入。而如此的機械動作會耗費很多的時間,情形就像是燒光碟時發生Buffer under run的意思差不多。所以該程式用一個像Nero一樣的緩衝區的方式,預防這種狀況。 因此我在想,如果是我的話,這樣的功能要如何實做出來?因為功力太差,所以只好在這裡問各位高手.... 這種緩衝區有一些的條件,大小可以自行設定,用完之後歸還memory... 我還想到一個問題,當碰到一個檔案的FileSize大於BufferSize,此時勢必將檔案分段載入Buffer,而這樣的程式又該如何寫? 謝謝各位高手的指教...
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-08-10 11:19:36 IP:61.221.xxx.xxx 未訂閱
轉貼BufferSize http://www.na.ntu.edu.tw/chinese/course/online/cplus/example/cplus/chap7/example/ 第 七 章 檔案輸出輸入    7 - 1 兩種檔案模式    C++ 語言本身並沒有提供輸出輸入的敘述,所有輸出輸入的工作均依賴函數庫所提供的輸出輸入函數,要使用 C++ 輸出輸入函數必需了解輸出入檔案的特性、輸出入的方法(I/O Method) 與輸出入函數的層次(Level of I/O)。    檔案可分為兩種模式:    (1)文字模式檔(Text Mode)    (2)二進位模式檔(Binary Mode)    (a)對新行(New Line)即 "\n" 的轉換不同    Text:"\n"---> ASCII 10--->輸出---> CR/LF(13/10)    "\n"---> ASCII 10<---輸入<---- CR/LF(13/10)    Binary:"\n"---> LF(10) <-----> LF(10) 輸出輸入    (b)對檔案結束(EOF End-Of-File) 的偵測不同    文字模式檔--->檔案長度達到或讀到 ctrl-z    二進位模式檔--->檔案長度達到    7 - 2 兩種輸出輸入的方法    檔案輸出輸入的方法:    (1)文字格式(Text Format)輸出入    (2)二進位格式(Binary Format)輸出入    文字資料: ASCII 碼儲存    數字資料:以二進位碼儲存。    當文字資料輸出時不管其輸出的方法是文字格式或二進位格式都一樣,為文字碼,不用轉換。    數字資料一般為二進位儲存,若用二進位的輸出入方法最為直接但是資料則不易看懂,若用文字方法輸出入則必需先將二進位的儲存資料轉為十進位再轉為ASCII 的文字碼再輸出。    例:一整數在記憶體中佔有兩個位元組    7---->0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 ----> 0X 00 07    127---->0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 ----> 0X 00 7F              二進位方法輸出: 7 --> 00 07    127 -->00 7F    文字方法輸出: 7 --> 37(ASCII)    127 -->31 32 37(ASCII)    程式處理過程的過渡資料則一般採用二進位的輸出入方法,可節省磁碟空間與執行時間。    若輸出入資料是供人閱讀則採用文字格式的輸出入方法。    文字輸出入格式或是二進位輸出入格式的採用,則決定於所使用的輸出入函數是文字格式或是二進位格式。    基本上兩種檔案模式與兩種輸出入方法,此二者可以形成四種搭配即:    Text Formart --> Text Mode File    Text Format --> Binary Mode File    Binary Format --> Text Mode File    Binary Format --> Binary Mode File         在 C++ 語言中此四種搭配都是合法的,但是在某些情況下檔案的資料可能會出問題。    例:    Binary Format --> Text Mode File    0X10 --> 0X13 + 0X10    數字 --> 控制碼    0X26 --> EOF    Text Format --> Binary Mode File    0X10 --> 0X10    Not 0X13+0X10    建議使用:    文字格式 -->文字模式檔    二進位格式 -->二進位模式檔                                  7 - 3 兩種輸出輸入的層次    兩種層次的輸出入函數:    (1)標準輸出入(Standard I/O)或    資料流輸出入(Stream I/O)    (2)低層次的輸出入函數    稱之為系統輸出入(Syatem I/O)。    高層次的輸出入是所提供的輸出入函數提供較多的服務,所有有關輸出入檔案的處理、資料的轉換、緩衝區(Buffer)    的管理等工作均是輸出入函數處理,對使用者而言若是輸出入資料是文字只要由輸出入函數和輸出入設備建立管道後,去讀寫即可。    系統輸出入則是屬於較低階的使用法,使用者必需自己作緩衝區的管理、資料的轉換等工作。    此兩種輸出入層次仍是決定於使用者使用那個函數。                        7 - 4 開檔函數--檔案模式與檔案輸出入屬性的決定    所有的標準輸出入函數均再 stdio.h的表頭檔中作函數原型宣告, 因此要使用這些函數必需先引入此表頭檔。    開檔函數的格式為:    FILE *fopen("file_name","attribute");    fopen 函數為標準輸出入的開檔函數,其需要兩個字串參數:    (1)第一個是檔案名稱字串    (2)第二個是檔案屬性字串。    當開檔成功後 fopen 會傳回指向 FILE 結構的指標變數,FILE 結構是在 stdio.h 中宣告的資料結構,此資料結構包含檔案的編號、緩衝區、檔案指標、與檔案屬性等資料。傳入的檔案參數可以給全路徑的檔名。                        檔案讀寫選擇及其屬性:    字 串 意 義    "r" 開一已存在的文字模式檔只供輸入用    "w" 開一新的文字模式檔只供輸出用    "a" 開一文字模式檔供由檔末附加資料    "rb" 開一已存在二進位模式檔只供輸入用    "wb" 開一二進位模式檔只供輸出用    "ab" 開一二進位模式檔供由檔末附加資料    "r+" 開一已存在文字模式檔供讀寫    "w+" 開一新文字模式檔供讀寫    "a+" 開一文字模式檔案供由檔末讀寫起    "rb+" 開一已存在二進位模式檔供讀寫    "wb+" 開一新二進位模式檔供讀寫    "ab+" 開一二進位模式檔案供由檔末讀寫起    上面的屬性中 b 表二進位模式檔案、 + 表示可讀寫檔案、w 是開新檔若檔案已存在則舊的資料會被蓋過、a 則由檔末附加資料。              #include  #include #include int main() { FILE *fp; int i; if( (fp=fopen("inter.dat","w"))==NULL) { cout<<"Can't open file"; exit(1); } for(i=0; i <=127; i) fprintf(fp,"=\n",i); fclose(fp); return 0; } 程式 7-1 : 開檔函數 fopen() 的使用 當開檔不成功時 fopen 會送回 NULL 的指標,因此使用者幾乎在開檔的同時便要測試開檔是否成功,開檔成功時將所送回的 指向 FILE 的指標指定給一指向 FILE 的指標變數,而後的輸出入便直接作用於此指標變數即是作用 關檔函數 fclose, 其使用格式為: int fclose(FILE *stream); fclose 用來關閉一用 fopen 開起的檔案,將緩衝區的資料寫到磁碟或清除,將記憶體歸還給系統,並將原檔案編號還給系統。任何已開起的檔案在程式結束前均必需使用 fclose 予於關閉,否則有可能漏失資料與佔用記憶體的情況。 當 fclose() 關檔成功時會傳回 0 的值,若失敗會傳回 EOF 即是 -1 的值。使用者可由傳回值判斷關檔是否成功。 7 - 5 檔案讀寫函數--輸出輸入方法的決定 二進位格式 文字格式 (數字) (文字) 標準輸出入 fread fscanf fgetc fgets fwrite fprintf fputc fputs 7-5-1:字元輸出入--以文字格式對文字模式檔案的標準層次輸出入 其使用函數為: int fgetc(FILE *stream); int fputc(char c, FILE *stream); fgetc 是由檔案讀入一字元,其傳回值為讀到的字元,若碰到檔案結束,則傳回 EOF。 putc 是將字元寫到檔案中,若成功的將字元寫到檔案中,則傳回寫入的字元,若失敗則傳回 EOF。 以下為一模擬 DOS 指令 type 的程式: #include #include #include int main(int argc, char *argv[]) { FILE *read; char ch; if( argc != 2) { cout<<"Usage : utype file_name\n"; exit(1); } if( (read=fopen(argv[1],"r"))==NULL) { cout<<"Can't open file :"< #include #include int main(int argc, char *argv[]) { FILE *read; char buffer[80]; if( argc != 2) { cout<<"Usage : utype file_name\n"; exit(1); } if( (read=fopen(argv[1],"r"))==NULL) { cout<<"Can't open file "< #include #include int main() { FILE *output; int i=0; char ch='a'; float x=2.0; if( (output=fopen("out.dat","w"))==NULL) { cout<<"Can't open file out.dat\n"; exit(1); } fprintf(output,"%c",ch); fprintf(output,"%d",i); fprintf(output,"%f",x); return 0; } 程式 7-4 : 檔案數值輸出入函數 7-5-4 : 二進位輸出入--以二進位格式對二進位模式檔案輸出入 在標準函數輸出入層次的函數中亦提供二進位資料的輸出入函數,其使用函數為: size_t fread(void *ptr, size_t size, size_t n, FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream); void *ptr 是資料讀入時存放的位置或是欲輸出資料存放的位址。 size_t 是定義為 unsigned int,size 是一筆輸出入資料的長度, n 是有幾筆資料要輸出入,stream 是輸出入的檔案。 fread()會傳回所讀資料的筆數,若失敗傳回值為 0; fwrite() 亦相同。 有兩點必需注意: (1) 此二函數輸出入時是以一筆資料為單位。 (2) 此二函數為二進位格式輸出入,資料不作 ASCII 碼的轉換,所以最好作用在二進位模式的檔案上。 #include #include #include int main(){ struct person { char name[20]; int age;}someone; FILE *fp; char ch; if( (fp=fopen("person.dat","wb"))==NULL) { cout<<"Can't open file person.dat\n"; exit(1);} do { cout<<"Input someone name \n"; cin>>someone.name; cout<<"Input someone age\n"; cin>>someone.age; fwrite(&someone,sizeof(someone),1,fp); cout<<"Add another one ?\n"; cin>>ch; } while(ch=='y'); fclose(fp); return 0; } 程式 7-5 : 二進位格式輸出函數 7 - 6 : 系統低階輸出入 系統輸出入是一較低階的輸出入函數, 使用者必需自己處理緩衝記憶體與讀寫指標的問題。 開檔函數: int open(char *file_name, int access, unsigned mode); int creat(char *file_name, int amode); creat() 用來開啟一不存在的檔案,若檔案已經存在則會被重寫入新資料而為一新檔,做為輸出的檔案。檔案模式由全域變數 _fmode決定,_fmode 為 O_TEXT 或 O_BINARY,文字模式或是二進位模式,讀寫屬性由 amode 決定: amode 讀寫屬性 S_IWRITE 可寫檔案 S_IREAD 可讀檔案 S_IREAD | SIWRITE 可讀寫檔案 當 creat() 開檔成功會傳回所謂的檔案順序值(File Handle),以做為輸出入函數作用的對像,若開檔失敗傳回 -1 的值。 open() 函數亦是用來開啟檔案用,開檔時需要三個參數:一是檔案名稱、二是檔案的存取限制、三是所欲開啟檔案的屬性。 檔案存取的限制和 creat() 函數一樣;屬性 access 的參數值則有: Access Symbolic 意 義 O_RDONLY 開一檔案供輸入 O_WRONLY 開一檔案供輸出 O_RDWR 開一檔案供輸出入 O_TEXT 開文字模式檔 O_BINARY 開二進位模式檔 O_APPEND 開一檔案由檔末讀寫 以上的檔案屬性可用 OR 的運算組合。 而系統輸出入函數則使用以下兩個函數: int read(int handle, void *buffer, unsigned len); int write(int handle, void *buffer, unsigned len); read() 與 write() 兩個函數均是以區塊輸出入的方式,使用者必需指定自己的 buffer 以供使用,len 是一次輸出入的區塊有多少位元組。如果讀寫成功會傳回所讀寫的位元組數,若是失敗會傳回 -1 的值。此二函數與 open() 或 creat() 搭配使用。 而關檔函數則用: int close(int handle); close() 關檔成功會傳回 0 的值, 失敗則傳回 -1 的值。 #include #include #define BUFFERSIZE 512 char buffer[BUFFERSIZE]; int main(int argc, char *argv[]) { int inhandle, bytes,j; if( argc != 2) { cout<<"Usage : utype file_name\n"; exit(1); } if( (inhandle=open(argv[1],O_TEXT|O_RDONLY)) < 0 ) { cout<<"Can't open file "< 0 ) for( j=0 ; j <=bytes; j) cout< #include #include int main() { FILE *fp; long int cup,length; if( (fp=fopen("test.dat","w"))==NULL) { cout<<"Can't open file tes.dat\n"; exit(1); } fprintf(fp,"This is a file size test\n"); fprintf(fp,"%d",123); cup = ftell(fp); fseek(fp,0L,SEEK_END); length = ftell(fp); fseek(fp,cup,SEEK_SET); cout<<"The file length is "< #include int main() { int outhandle; char ch,otext[]="This is test"; if( (outhandle=open("test.dat",O_RDWR)) < 0 ) { cout<<"Can't open file test.dat\n"; exit(1); } write(outhandle, otext,sizeof(otext)); lseek(outhandle,0L,SEEK_SET); while ( read(outhandle,&ch,1) > 0) print("%c",ch); close(outhandle); return 0; } 程式 7-8 : 系統層次隨機輸出入函數的使用 -------------------------------------------------------------------------------- C 程式語言作業七 一、請寫作一程式具有以下的功能﹕ 能複製一文書檔(Text) ,檔案名稱用 scanf 輸入。 能開起一文書檔,並將檔案內容輸出至銀幕。 二、此程式請分兩個版本一用 stdio.h 的檔案相關函數,另一個用 iostream.h 的物件檔案函數。 三、本次作業請交磁片,需包含所有的程式與所使用的文書檔。 請問一下如果martialart網友日後找出解決方法 可否公開理論部份 你題到 1 如果讀取的資料來不及讓磁帶在捲動中寫入,則磁帶必須倒帶到中斷的地方繼 續寫入。而如此的機械動作會耗費很多的時間 --------------------------------------------------------- (個人覺得目前最快方式 就是使用CF卡取代disk讀取 但是此為硬體方式解決 並非你要的答案) 2 當碰到一個檔案的FileSize大於BufferSize,此時勢必將檔案分段載入Buffer ---------------------------------------------------------------------- 你問此問題時應該也已經想到先行分割檔案 並依編號載入 最方便方式 採用 winrar的command呼叫方式 不就有便利之愉 (此應為程式判斷細節部份) 說到此RAMdisk好像還未談到如何應用 我還是等看看axsoft版主的解惑 這樣才能有討論意義
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
martialart
一般會員


發表:6
回覆:6
積分:7
註冊:2002-06-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-08-10 16:41:24 IP:203.79.xxx.xxx 未訂閱
http://www.superspeed.com 這家公司的Ramdisk軟體很不錯... 裡面也提到,開一個50MB的ramdisk,將IE的Temporary Internet Files設到ramdisk,可以省掉很多的disk I/O,我試過,真的很好用.... 我想到另一個問題,Ramdisk是否可以做到動態改變大小。 像superspeed出的RAMDISK軟體,如果要改變大小,必須先關閉ramdisk,在重新開啟才行。有沒有可能在不影響ramdisk裡面資料的情形下,動態改變大小。 對Windows來說,Ramdisk是一個硬體的磁碟(雖然是模擬出來的),而磁碟能不能夠做到動態改變大小?還請高手幫忙解惑.... 另外,現在的作業系統都有cache的機制,在使用ramdisk時,有沒有可能同樣的資料內容,在ramdisk裡有一份,另外在OS所使用的memory cache裡面又有一份? 這個問題就是說OS在讀取ramdisk裡的檔案時,是將該檔案視為從Disk讀取,還是視為從RAM裡讀取? 一堆雜七雜八的問題,打擾各位大大了...謝謝~~~
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-08-10 18:11:47 IP:210.65.xxx.xxx 未訂閱
我試過好像最大250MB但是需修改 Msdos.sys的 AutoScan=1好像改為0 和C:\WINDOWS\COMMAND\Scandisk.ini 內容下的 Quit Causes ScanDisk to terminate if it encounters this problem. 即可超越50MB 設太大會有反效果 dos啟動無法載入ramdisk 2 視為從Disk讀取 3 另外在OS所使用的memory cache裡面又有一份?/回存用的 4 不需重新開啟但是須先將ramdisk再載入才行 所以是可以動態改變大小你再試看看 此公司也有NT版 忘了說此法也可以使用於印表機的圖片處理部份 將超大圖片檔分割之後整個由ramdisk讓硬體處理 等超大型CF卡或其他硬體現世 應該就不需要ramdisk了 因為機械式讀取將會淘汰 也解決速度上的困境 發表人 - jackkcg 於 2002/08/10 18:16:56 發表人 - jackkcg 於 2002/08/10 18:23:51
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
martialart
一般會員


發表:6
回覆:6
積分:7
註冊:2002-06-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-08-11 02:57:18 IP:210.201.xxx.xxx 未訂閱
謝謝jackkcg的解答... 我是用WinXP版來試的,在要重新設定新的ramdisk大小時,必須先將打開的ramdisk給remove掉,來後重新add一個ramdisk。因為原先的ramdisk必須remove掉,所以裡面的資料勢必消失,無法保留。所以我才在想有無可能直接改變ramdisk的大小,而不須先將ramdisk給remove之後,再重新增加一個... 在windows裡的DOS中有一個 subst.exe 的DOS版程式,可以將硬碟中任一個folder給map到指定的磁碟機代號,也就是虛擬磁碟... 有沒有可能在記憶體中開一個buffer,然後將這個buffer給map到一個磁碟機代號,如此只要動態改變buffer大小即可達到類似的效果。 另外以前在玩一些game時,有一個叫做fakecd的小程式,它利用一種叫做重導向的技術,讓對光碟機這個disk做寫入的動作時,可以設定變為對HD裡某個folder做寫入。所以可以將一些game的程式檔燒錄在光碟,玩的時候直接用光碟片裡的程式執行,而程式會認為這個disk是硬碟而不是光碟,所以可以存檔,而存檔的時候則會重導向到硬碟裡的folder。如此,硬碟裡面只須儲存遊戲存檔即可,大大的節省硬碟的空間。 我想請問,這種重導向的技術,有沒有可能應用到Ramdisk。在對ramdisk做寫入時,可以變成實際上對硬碟裡的檔案做寫入。如此,就可以不用擔心還要定時對ramdisk做備份,或是在程式中去做write back的動作.... 一些異想天開的想法,請賜教.... 謝謝~~
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-08-11 10:36:06 IP:61.70.xxx.xxx 未訂閱
請問martialart兄 可以借 subst.exe 的DOS版程式和fakecd的小程式玩玩嗎? 或告知下載試用版位置 我只玩過link的功能程式 關於 必須先將打開的ramdisk給remove掉,來後重新add一個ramdisk。因為原先的ramdisk必須remove掉,所以裡面的資料勢必消失,無法保留。所以我才在想有無可能直接改變ramdisk的大小,而不須先將ramdisk給remove之後,再重新增加一個 (天馬行空討論3) 讓我想了一下 1 如果資料找已a回存 又有b實體原資料 再加妳程式備份資料 為何怕資料勢必 消失,無法保留 暫時的消失是為了取更多資料(^-^有點巷廣告) 由於我的老師說我的思考是一種 跳藥式 (永遠不會專心)見笑見笑 一直希望也有其他人能 另類思考
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
martialart
一般會員


發表:6
回覆:6
積分:7
註冊:2002-06-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-08-11 13:07:51 IP:203.79.xxx.xxx 未訂閱
FakeCD在這裡 http://www.math.uni-rostock.de/~nfa506/fakecddr.html http://www.programmersheaven.com/zone16/cat912/3070.htm subst.exe 只要是windows裡就有了, 9x/me 在 c:\windows\command\ NT/XP 在 C:\windows\system32\ 直接開個DOS視窗,輸入 subst/? 按 enter 就可以了
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-08-18 23:25:34 IP:61.70.xxx.xxx 未訂閱
(轉貼)windows2000的ramdisk 的資料 有興趣之朋友 可以參考看看 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=20547
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-05-06 18:56:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!