如何在保存文件之前知道文件的当前位置?

如何在保存文件之前知道文件的当前位置?

我使用的是 Windows 操作系统。假设我在 Windows 中打开记事本,然后在其中输入一些内容但不保存。因此我想知道在保存记事本文件之前它的当前位置,即它当前位于哪里,比如在 Ram、Rom、缓存内存中还是硬盘中。

答案1

通过“文件位置”,您可以参考下列内容之一:

  • 磁盘上的逻辑位置,即文件位于哪个目录和子目录中。您可以通过询问应用程序本身来查看此信息,通常会有一个“属性”对话框,或者选择“另存为...”而不是“保存”。前者将建议一个默认的保存文件夹,对于大多数应用,在这种情况下将是现有文件的位置...只要它存在,即它至少已经被保存过一次。

  • 磁盘上的物理位置即,磁性介质中的哪些扇区保存文件的数据。有几种磁盘编辑器可以做到这一点,旨在恢复丢失的文件。物理位置与文件的元数据并映射到文件系统上为此目的保留的描述区域(或多个区域)。在 Windows NTFS 中,您有主文件表 (MFT)。

  • 内存中的逻辑位置即,什么内存结构保存你的文件。计算机内存分为几个区域,有些区域只有操作系统的内核可以访问,有些区域只有高级用户可以访问,有些区域每个人都可以访问。你的文件应该“存在”在地址空间记事本应用程序本身位于用户空间. 知道在哪里在堆中,您需要一个调试器来打开记事本并跟踪其内部内存指针。

  • 内存中的物理位置即上述空间在物理内存中的确切位置。如果它们确实存在的话。逻辑内存不一定在 RAM 中;现代处理器可能会将被视为未使用或未充分使用的宝贵 RAM 部分“交换”到磁盘或其他设备,从而释放快速而宝贵的 RAM 以供某些更需要的应用程序使用。那些发现自己被交换出去的应用程序并不知道这一点,因为物理到逻辑的信息通常被内核隐藏起来。这样,作为一个应用程序,您可能会在只有 4 GB RAM 的计算机上“看到” 64 GB 的 RAM。

“剪贴板”是另一个内存区域,它归操作系统所有(实际上我认为是 Windows 资源管理器,即位于操作系统之上的用户界面 - 但我不太确定),并且不是可用于记事本存储“文件”。记事本可以使用它来存储文件的内容暂时:选择全部,Ctrl C现在文件的内容就在剪贴板中,你可以粘贴它在别的地方。但是文件仍在磁盘上,并且其内存表示在记事本的堆中。

ROM 是只读存储器 - 它可能仅在计算机组装时写入(“刷新”)一次,即使某些可编程 ROM (PROM) 可以在以后使用专门为这些 ROM 设计的适当程序重新刷新。因此,(或记事本)无法存储任何事物在 ROM 中。

缓存内存速度非常快,因此非常昂贵,因此体积非常小,旨在方便地保存 CPU 最常使用的数据。当您运行记事本并打开文件时,该文件的部分内容和记事本代码的部分内容将进入 CPU 缓存(或多个缓存;可能最多有三个级别,L1、L2、L3 - L1 速度最快,因此最昂贵,因此体积最小。但即使是 L3 通常也比普通 RAM 快)并在那里停留一段时间。缓存检查很难,因为执行此操作的程序需要由使用该缓存内存的同一 CPU 执行。这有点像对自己进行脑部手术。

“缓存”一词的另一个含义是,表示一块未使用的物理 RAM,用于存储从磁盘读取后的数据以及实际写入磁盘之前要写入的数据。这样,重复读取就不会“命中”较慢的磁盘,从而速度会更快;写入可以一起完成,顺序更适合磁盘的数据组织,并延迟到系统不那么繁忙时再进行。这些效果结合在一起,使磁盘看起来比实际快得多。因此,在记事本中读取文件后,该文件肯定会存活在 RAM 磁盘缓存中停留一段时间,除非重新调整该空间的优先级并回收用于其他用途。

您的文件在这里或者可能在这里,取决于“be”的含义:

DISK             [MFT]---->[You]--->[r f]-->
                 -->[ile]     [Your fi]-->[le (previous version)]
                       |     [Y]--[our file (deleted copy, space not yet reclaimed)]
                       |
                       V
INTERNAL DISK     [You][r f][ile]
CACHE                  |
                       V
MEMORY CACHE           [r f][ile][...other stuff...]

NOTEPAD'S HEAP    [Yo]--[fi]--[ur]--[le] [Yo] [other data] [undo buffer: Yrou]

CLIPBOARD         "This is my file's first sentence, which I just copied"

CPU CACHE         [first sent][...other programs' stuff...][just cop]

答案2

您可以使用任何标准调试工具(例如 WinDBG 或 Olly Debugger)来实现这一点。

您基本上将调试器程序附加到记事本,然后它允许您查看正在执行的程序以及它使用的内存位置、它们的值、寄存器和其他资源。

请参考以下 URL 来开始操作:-

相关内容