`
- 浏览:
120166 次
- 性别:
- 来自:
北京
-
1
#define _WIN32_WINNT 0x0400
2
#include <windows.h>
3
#include <winioctl.h>
4
//ReadFileLink
5
ULONGLONG *GetFileClusters(
6
PCHAR lpFileName,
7
ULONG *ClusterSize,
8
ULONG *ClCount,
9
ULONG *FileSize
10
)
11

{
12
HANDLE hFile;
13
ULONG OutSize;
14
ULONG Bytes, Cls, CnCount, r;
15
ULONGLONG *Clusters = NULL;
16
BOOLEAN Result = FALSE;
17
LARGE_INTEGER PrevVCN, Lcn;
18
STARTING_VCN_INPUT_BUFFER InBuf;
19
PRETRIEVAL_POINTERS_BUFFER OutBuf;
20
CHAR Name[7];
21
22
Name[0] = lpSrcName[0];
23
Name[1] = ':';
24
Name[2] = 0;
25
26
GetDiskFreeSpace(Name, &SecPerCl, &BtPerSec, NULL, NULL);
27
28
ClusterSize = SecPerCl * BtPerSec;
29
30
hFile = CreateFile(lpFileName, FILE_READ_ATTRIBUTES,
31
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
32
NULL, OPEN_EXISTING, 0, 0);
33
34
if (hFile != INVALID_HANDLE_VALUE)
35
{
36
*FileSize = GetFileSize(hFile, NULL);
37
38
OutSize = sizeof(RETRIEVAL_POINTERS_BUFFER) + (*FileSize / ClusterSize) * sizeof(OutBuf->Extents);
39
40
OutBuf = malloc(OutSize);
41
42
InBuf.StartingVcn.QuadPart = 0;
43
44
if (DeviceIoControl(hFile, FSCTL_GET_RETRIEVAL_POINTERS, &InBuf,
45
sizeof(InBuf), OutBuf, OutSize, &Bytes, NULL))
46
{
47
*ClCount = (*FileSize + ClusterSize - 1) / ClusterSize;
48
49
Clusters = malloc(*ClCount * sizeof(ULONGLONG));
50
51
PrevVCN = OutBuf->StartingVcn;
52
53
for (r = 0, Cls = 0; r < OutBuf->ExtentCount; r++)
54
{
55
Lcn = OutBuf->Extents[r].Lcn;
56
57
for (CnCount = (ULONG)(OutBuf->Extents[r].NextVcn.QuadPart - PrevVCN.QuadPart);
58
CnCount; CnCount--, Cls++, Lcn.QuadPart++) Clusters[Cls] = Lcn.QuadPart;
59
60
PrevVCN = OutBuf->Extents[r].NextVcn;
61
}
62
}
63
64
free(OutBuf);
65
66
CloseHandle(hFile);
67
}
68
return Clusters;
69
}
70
71
//how do we use the clusters
72
void Read(
73
PCHAR lpSrcName
74
)
75

{
76
ULONG ClusterSize, BlockSize;
77
ULONGLONG *Clusters;
78
ULONG ClCount, FileSize, Bytes;
79
HANDLE hDrive, hFile;
80
ULONG SecPerCl, BtPerSec, r;
81
PVOID Buff;
82
LARGE_INTEGER Offset;
83
CHAR Name[7];
84
85
Clusters = GetFileClusters(lpSrcName, &ClusterSize, &ClCount, &FileSize);
86
87
if (Clusters)
88
{
89
Name[0] = '\\';
90
Name[1] = '\\';
91
Name[2] = '.';
92
Name[3] = '\\';
93
Name[4] = lpSrcName[0];
94
Name[5] = ':';
95
Name[6] = 0;
96
97
hDrive = CreateFile(Name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);
98
99
if (hDrive != INVALID_HANDLE_VALUE)
100
{
101
102
Buff = malloc(ClusterSize);
103
104
for (r = 0; r < ClCount; r++, FileSize -= BlockSize)
105
{
106
Offset.QuadPart = ClusterSize * Clusters[r];
107
108
SetFilePointer(hDrive, Offset.LowPart, &Offset.HighPart, FILE_BEGIN);
109
110
ReadFile(hDrive, Buff, ClusterSize, &Bytes, NULL);
111
112
BlockSize = FileSize < ClusterSize ? FileSize : ClusterSize;
113
114
}
115
116
free(Buff);
117
118
CloseHandle(hDrive);
119
}
120
free(Clusters);
121
}
122
}
123
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
这通常涉及到使用系统调用或库函数,如`opendir`、`readdir`和`closedir`等,在UNIX-like系统中,或使用Windows API的`FindFirstFile`和`FindNextFile`等在Windows系统中,来枚举目录下的文件和子目录,并将它们的...
4. **文件操作**:在处理API搜索文件时,可能会涉及到读取、解析和存储文件数据。这可能包括读取文本文件、XML文件或者数据库文件,以获取API的详细信息。 5. **错误处理**:任何编程项目都需要注意错误处理,确保...
总结起来,通过C#的文件读写API,我们可以高效地处理文件,构建行链表,解析文件内容,并进行相应的修改。理解这些基本操作是进行更复杂文件处理任务的基础,如日志分析、数据处理和文件格式转换等。在实际项目中,...
本文将深入探讨如何通过编程方式读取DXF文件,以实现数据的解析与处理。 首先,我们需要了解DXF文件的基本结构。DXF文件由多个段(sections)组成,包括HEADER、CLASSES、TABLES、BLOCKS、ENTITIES和ENDOFDWG。每个...
1. **读取配置文件**:函数可能命名为`readIniFile`,它会打开一个`ini`文件,逐行读取内容,解析节和键值对,并将它们存储在一个数据结构中,如链表或哈希表,以便后续的查找和处理。 2. **创建数据结构**:为了...
在本项目中,我们将利用内核链表实现一个简单的学生管理系统,该系统能够创建、更新和读取存储在文件中的学生记录。 首先,我们需要了解内核链表的基本概念。内核链表是一种动态数据结构,它由一系列节点组成,每个...
本篇将详细讲解如何在mobile环境中封装一个ini文件的读取功能,以及如何处理由于SDK限制无法直接使用API函数的情况。 一、ini文件结构与内容 ini文件通常包含多个节(section)和键值对(key-value pairs)。每个节...
在Windows系统中,INI文件被广泛使用,但在Linux环境下,尽管没有内置的API专门处理INI文件,但可以通过标准C库函数或自定义解析器来实现读写操作。本项目提供了在Linux下用纯C语言读写INI文件的实现方法。 首先,...
C++ API 帮助文件是为初学者设计的一个资源,旨在提供关于C++编程语言中函数和其他关键概念的详细信息。C++是一门强大的、面向对象的编程语言,广泛应用于系统软件、游戏开发、应用软件以及嵌入式系统等领域。它的...
1. 读取bmp文件并创建`CBitmap`对象。 2. 将`CBitmap`对象存储在链表节点的数据成员中。 3. 确保添加操作检查输入图像是否为bmp格式,如果不是,则拒绝添加。 ### 实现注意事项 - 使用`AddNodeAtHead()`和`...
这涉及读取数据文件,将数据解析成链表结构,以及将链表结构写回文件。文件读写通常使用流式API,如C++的`fstream`库或Python的内置`open()`函数。解析数据时,可以采用CSV格式,其中每行代表一个运动员的成绩,包含...
反之,当启动程序时,系统会从文件中读取数据并加载到链表中。这样,即使程序退出,下次打开时仍能恢复之前的状态。 在实现过程中,可能需要处理的关键点包括:1) 文件的打开、读写和关闭操作;2) 链表节点的创建、...
在这个“动态链表数据库”项目中,开发者实现了一个跨平台的解决方案,能够运行在Windows(win32)和Linux操作系统上,这涉及到对不同操作系统API的理解和应用。 链表作为基础数据结构,它有别于数组,数组中的元素...
压缩包中的“简单UI框架链表结构易语言源码”文件应当包含了实现以上功能的全部代码。通过阅读和理解这些源码,我们可以学习到如何在易语言中构建链表结构,如何操作UI组件,以及如何利用Windows API进行窗口管理和...
3. **文件的创建和删除**:操作系统提供API或命令行工具来创建和删除文件。创建文件时,操作系统会在磁盘上分配空间,并记录文件元数据,如文件名、大小、创建日期等。删除文件时,只是将文件的元数据标记为已删除,...
读取MAC地址通常涉及到底层的网络编程,这在MFC中可以通过调用Win32 API函数来实现。关键的API函数是`GetAdaptersInfo()`或`GetAdaptersAddresses()`。这两个函数都属于Windows的IP Helper API,用于获取网络适配器...
`CFile`类提供了一种封装Windows API文件操作的方法,使得代码更易于理解和维护。例如,可以使用`Open`函数打开文件,`Write`函数写入数据,`Read`函数读取数据,以及`Close`函数关闭文件。 **链表**: 链表是一种...
每次启动系统时,可以读取txt文件将数据加载到链表中,退出时再将链表内容写回文件,以确保数据不丢失。在实际应用中,可能还需要考虑错误处理和数据校验,以防止数据损坏或不一致。 最后,"看不懂点这里.txt"可能...
6. 文件操作:创建、打开、读取、写入、关闭、移动、复制和删除文件是文件管理的基本操作。学生需要掌握各种编程语言中对应的API函数或方法。 7. 文件备份与恢复:理解备份策略(如增量备份、差异备份)和数据恢复...
10. 库的使用:源码库可能包含示例代码或API文档,指导如何在自己的项目中集成和使用这个库,如创建新的DXF文件、添加图形元素、读取现有文件等。 通过深入研究和理解这个源码库,开发者可以构建自己的DXF处理工具...