文件指針

一.移動文件指針
SetFilePointer,hFile,lDistanceToMove,lpDistanceToMoveHigh,dwMoveMethod
dwMoveMethod 指明移動的模式
FILE_BEGIN??????? 不管文件處于什么地方,總是從文件的頭部開始移動,這時的位置參數相當于指定了一個絕對位置
FILE_CURRENT?? 從當前的文件指針處開始移動,這時的位置參數相當于指定了一個相對位置
FILE_END?????????? 從文件尾開始移動,如果要從文件尾往回移動一段距離,那么位置參數就應該指定為負數

Win32文件操作函數可以支持很多對象,有些對象并不支持文件指針,對他們就不能使用SetFilePointer函數

既然文件指針可以設置,那么如何獲取當前的文件指針呢?
實際上 并沒有一個專用的函數可以完成這個功能,,但是我們可以巧妙的利用SetFilePointer來獲取當前的文件指針

invoke SetFilePointer,hFile,0,NULL,FILE_CURRENT
實際上文件并沒有移動,所以返回值就是當前的文件指針

二.文件分割
文件指針可以移動到文件所有數據的后面,比如,現在文件的長度是100B,但是還是可以把文件指針的數據移動到1000B的位置,這樣的操作有什么用處呢?用途是可以將文件擴展到需要的長度,,接著在用WriteFile寫入數據,就是從1000B的地方開始寫入.

使用SetEndOfFile函數也可以擴展文件長度,SetEndOfFile總是將文件的長度調整到當前文件指針指向的長度,,所以這個函數還有截斷文件的功能,當文件指針位于文件文件中間的時候,函數將文件指針后面的內容截斷,當文件指針位于文件尾以后的位置,函數將文件長度擴展.
invoke SetEndOfFile,hFile

當文件被擴展的時候,被擴展部分的內容是不確定的(MSDN說的,試驗的結果好像這部分總是0)

?

?

;--------------------------------------------------------------------------------
;程序環境設置
.386
.model flat,stdcall
option casemap:none
;--------------------------------------------------------------------------------
;頭文件與庫文件導入
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
L	macro	@var:VARARG
LOCAL	@lbl
.const
@lbl		db	@var,0
.code
exitm	<offset @lbl>
endm
;--------------------------------------------------------------------------------
;函數定義
;--------------------------------------------------------------------------------
;等值替換定義
;--------------------------------------------------------------------------------
;宏定義
;--------------------------------------------------------------------------------
;包含文件
;--------------------------------------------------------------------------------
;已初始化數據段
.data
dwDistanceLow	dd	1024 * 1024
;--------------------------------------------------------------------------------
;未初始化數據段
.data?
hFile		dd		?
dwBytes	dd		?
;--------------------------------------------------------------------------------
;常量段
.const
szString	db		"0123456789",0
;--------------------------------------------------------------------------------
;代碼段
.code
start:
invoke	CreateFile,L("test.dat"),GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
.if		eax == INVALID_HANDLE_VALUE
invoke	MessageBox,NULL,L("Create Files Fails"),L("Error"),MB_OK
jmp		@F
.endif
mov		hFile,eax
invoke	SetFilePointer,hFile,1024,NULL,FILE_CURRENT
.if		eax != NULL
invoke	MessageBox,NULL,L("Success"),L("Success"),MB_OK
.endif
invoke	WriteFile,hFile,addr szString,sizeof szString,addr dwBytes,NULL
invoke	SetEndOfFile,hFile
invoke	CloseHandle,hFile
@@:
invoke	ExitProcess,NULL
;--------------------------------------------------------------------------------
end start  ;函數入口地址

?

?

?

如果文件大小為1kb?? 那么Size On Disk 就為4kb?? 因為在我的電腦上? 磁盤對齊粒度是4kb

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375295.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375295.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375295.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

見證下的自我變化-2014全年總結

又是一年總結季&#xff0c;回過頭看看看自己的成長&#xff0c;心里真的是滿滿的喜悅之情…… 一年前自己的總結博客&#xff1a;http://blog.csdn.net/huo065000/article/details/19632603 半年前自己的總結博客&#xff1a;http://blog.csdn.net/huo065000/article/details/…

【Linux學習篇】This virtual machine is configured for 64-bit guest operating systems.……

在學習Linux的基本操作的時候&#xff0c;安裝虛擬環境則提示自己 This virtualmachine is configured for 64-bit guest operatingsystems.……起初由于各種拒絕的心理&#xff0c;所以屏蔽了這個錯誤&#xff0c;但是屏蔽永遠也解決不了問題的&#xff0c;所以自己則嘗試百度…

圖解SSIS監視文件夾并自動導入數據

圖解SSIS監視文件夾并自動導入數據 原文:圖解SSIS監視文件夾并自動導入數據 演示案例&#xff1a;讓系統自動監視文件夾&#xff0c;并把文件夾下面的excel文件導入到sql中&#xff0c;之后清空目錄。這個過程以往都需要寫程序來實現或者定時執行&#xff0c;現在可以用ssis來訂…

DLL轉Lib

在C中,為了允許操作符重載和函數重載,C編譯器往往按照某種規則改寫每一個入口點的符號名,以便使用同一個名字(具有不同的參數類型或者是不同的作用域)有多種不同的用法,而不會打破現有基于C的鏈接器,.這項技術通常被稱為改編(Name Mangling)或者名稱修飾(Name Decoration),許多…

WP8手機解鎖時提示“請確保IPOVERUSBSVC服務正常運行”解決方法

如果你各種重啟服務 卸載手機 重裝驅動都試過了還不行&#xff0c;請看看你是否安裝了Hyper-v或Vitualbox虛擬機&#xff0c;很有可能是虛擬交換機造成的。 我在網絡連接屬性里看到這個 把它卸載后&#xff0c;解鎖成功。 解鎖后記得重新安裝卸載的那個網絡服務轉載于:https://…

Win32路徑操作相關API

一.路徑截斷與合并 PathRemoveArgs 去除路徑的參數 PathRemoveBackslash 去除路徑最后的反斜杠 "\" PathAddBackslash 在路徑最后加上反斜杠 "\" PathRemoveBlanks 去除路徑前后的空格 PathAddExtension 在文件路徑后面加上擴展名 PathRemoveExtension 去…

Openjudge-計算概論(A)-稱體重

描述&#xff1a; 趙、錢、孫、李四個人中既有大人也有小孩&#xff0c;給他們稱體重時發現&#xff0c;他們每個人的體重都不一樣&#xff0c;且體重&#xff08;單位&#xff1a;公斤&#xff09;恰好是10的整數倍&#xff0c;且他們的體重都不高 于50公斤&#xff0c;已知趙…

浮點數的存儲

-------------------------------------------------------------------------------- 在VC6.0----float環境一共32位 其中第一位是符號位 第二到第9位中間8位為小數點位置&#xff08;指數以127的二進制為原點向下為負指數 向上為正指數&#xff09;后面23位為數據位。 S EE…

第二階段總結

結合第二階段后3天&#xff0c;我們試用了UI&#xff0c;antionbar&#xff0c;menu等實用&#xff0c;成功的做出了字體的轉換&#xff0c;題目的轉化等功能。 其實四則運算&#xff0c;說難不難 說易不易&#xff0c;總結出 主要有付出&#xff0c;就有回報。 menu等做的過程…

const 和指針

c用了那么久&#xff0c;覺得 const 和指針配合到一起的時候就會有點點分不出來。 如下: const Data* pData;Data const * pDataData * const pDataconst Data * const pData Data const * const pData是不是有點暈&#xff1f; 我其實用得最多的是 const Data* pData, 也…

Linux 查看系統用戶的登錄日志

查看用戶登錄系統的日志有兩類日志記錄用戶登錄的行為&#xff0c;一是記錄登錄者的數據&#xff0c;一個是記錄用戶的登錄時間一&#xff0c;記錄用戶登錄數據/var/log/wtmp日志文件記錄用戶登錄的數據。但這個文件是被編碼的文件&#xff0c;不能直接用vi、cat等命令查看&…

Android -- 自定義權限

在android系統的安全模型中&#xff0c;應用程序在默認的情況下不可以執行任何對其他應用程序&#xff0c;系統或者用戶帶來負面影響的操作。如果應用需要執行某些操作&#xff0c;就需要聲明使用這個操作對應的權限。 &#xff08;在manifest文件中 添加標記&#xff09;。 ap…

Win32 路徑操作API

路徑操作相關API 路徑截斷與合并函數 PathRemoveArgs 去除路徑的參數 PathRemoveBackslash 去除路徑最后的反斜杠“\” PathAddBackslash 在路徑最后加上反斜杠“\” PathRemoveBlanks 去除路徑前后的空格 PathAddExtension 在文件路徑后面加上擴展名 Pa…

dbms_output.put_line長度限制問題

dbms_output.put_line長度限制問題對于10g以上版本(包括10g), dbms_output.put_line的最大長度限制是32767. 如果報錯buffer overflow, 執行如下語句即可:set serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED對于10g以下版本dbms_output.put_line最大長度限制是255.轉載于…

js深入研究之Person類案例

<script type"text/javascript"> /* 定義一個Person類 */ function Person(name, age) {this.name name;this.age age; } /* 添加兩個方法getName getAge */ Person.prototype {getName: function() {return this.name;},getAge: function() {return this.a…

C++名稱粉碎

C name mangling 1: ?0: 構造器&#xff0c;?1 析構器 2: QAE: public __thiscall AAE: private __thiscall QBE: public __thiscall const 3: 返回值和參數類型 B&#xff1a;const D&#xff1a;char E&#xff1a;unsigned char F&#xff1a;…

一款基于css3鼠標經過圓形旋轉特效

今天給大家分享一款基于css3鼠標經過圓形旋轉特效。當鼠標經過的時候圖片邊框顏色旋轉&#xff0c;圖片顯示詳情。該實例適用瀏覽器&#xff1a;IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗。效果圖如下&#xff1a; 在線預覽 源碼下載 實現的代碼。 ht…

Delphi與Windows 7下的用戶賬戶控制(UAC)機制

WIN7/WIN8/WIN10, Vista提供的UAC機制&#xff0c;它的主要目的是防止對于操作系統本身的惡意修改。 對于Delphi程序的影響&#xff0c;UAC主要在于以下幾點&#xff1a; 1、由于UAC機制&#xff0c;Delphi對于系統的操作可能無聲的失敗&#xff0c;而同樣的程序&#xff0c;在…

[轉]深入理解Java 8 Lambda(類庫篇——Streams API,Collectors和并行)

以下內容轉自&#xff1a; 作者&#xff1a;Lucida 微博&#xff1a;peng_gong 豆瓣&#xff1a;figure9 原文鏈接&#xff1a;http://zh.lucida.me/blog/java-8-lambdas-insideout-library-features 本文謝絕轉載&#xff0c;如需轉載需征得作者本人同意&#xff0c;謝謝。 --…

Eclipse生成jar包

前言: 本宅因為要寫XXX軟件的一個插件,來用用java,接觸3天后 在打jar包上卡住了..... 經過大量的百度搜索后有如下幾種解決方案: 解決方案: 一.安裝Fatjar 在線安裝地址:http://kurucz-grafika.de/fatjar 悲劇的是我怎么也安裝不上去,于是放棄(在線下載包什么 我的Eclipse版…