如何像迅雷那样迅速建立大尺寸文件

失散糖 2015-03-30 09:15:52
Windows系统下,磁盘剩余空间不必考虑的情况,如何迅速建立文件呢?我不需要系统好心帮忙把文件里的各个字节或是扇区清零,只要能够迅速让文件把需要占用的空间占好即可,文件里面是什么乱码都无所谓。迅雷下载大型文件的时候就是这样的,新建一个任务,然后立刻暂停任务,查看任务文件里面的东西,会发现里面全是乱码,应该就是磁盘占用的扇区没有执行清零操作的结果。
什么?SetFilePointer + SetEndOfFile?我试过这个,虽然可以一瞬间建立好文件,而且看起来好像全都清零好了,但实际上这个文件是假的,我往这个文件末尾写东西的时候,还是会有很长时间的磁盘清零操作。有没有什么办法实现上述的事?我打算用这种方式建立大文件,然后在这个大文件上玩FATFS之类的东西。
...全文
605 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-04-01
  • 打赏
  • 举报
回复
查MSDN是Windows程序员必须掌握的技能之一。
失散糖 2015-04-01
  • 打赏
  • 举报
回复
顺带一提,我在测试的时候都是关掉用户账户控制的,所以默认就有管理员权限,可以成功;当我启用用户账户控制后,楼上的代码还是失败的,这时需要以管理员身份运行才能成功。我记得使用迅雷的时候不需要什么用管理员身份的,我才想到,我监视的不是迅雷的主程序,因为监视过发现里面没有创建文件之类的调用;我监视的是迅雷的服务,名叫XLServicePlatform,大概服务默认就有管理员权限,或者更高的权限吧,所以迅雷能够成功建立那种文件。
jiht594 2015-03-31
  • 打赏
  • 举报
回复
是不是 内存文件映射啊
赵4老师 2015-03-31
  • 打赏
  • 举报
回复
SetEndOfFile The SetEndOfFile function moves the end-of-file (EOF) position for the specified file to the current position of the file pointer. BOOL SetEndOfFile( HANDLE hFile // handle of file whose EOF is to be set ); Parameters hFile Handle to the file to have its EOF position moved. The file handle must have been created with GENERIC_WRITE access to the file. Return Values If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError. Remarks This function can be used to truncate or extend a file. If the file is extended, the contents of the file between the old EOF position and the new position are not defined. If you called CreateFileMapping to create a file-mapping object for hFile, you must first call UnmapViewOfFile to unmap all views and call CloseHandle to close the file-mapping object before you can call SetEndOfFile. QuickInfo Windows NT: Requires version 3.1 or later. Windows: Requires Windows 95 or later. Windows CE: Requires version 1.0 or later. Header: Declared in winbase.h. Import Library: Use kernel32.lib. See Also File I/O Overview, File Functions, CloseHandle, CreateFile, CreateFileMapping, UnmapViewOfFile
赵4老师 2015-03-31
  • 打赏
  • 举报
回复
大文件是大文件 稀疏文件是稀疏文件
Sparse File Operations
[This is preliminary documentation and subject to change.] 

You can determine whether a file system supports sparse files by calling the GetVolumeInformation function and examining the FILE_SUPPORTS_SPARSE_FILES bit flag.

Most applications are not aware of sparse-files and will not create sparse files. The fact that an application is reading a sparse file is transparent to the application. An application that is aware of sparse-files should determine whether its data set is suitable to be kept in a sparse file. After that determination is made, the application must explicitly declare a file as sparse, using the FSCTL_SET_SPARSE operation.

After an application has set a file to be sparse, the application can use the FSCTL_SET_ZERO_DATA operation to set a region of the file to zero. In addition, the application can use the FSCTL_QUERY_ALLOCATED_RANGES operation to speed searches for nonzero data in the sparse file.

When you perform a write operation (with a function or operation other than FSCTL_SET_ZERO_DATA) whose data consists nothing but zeros, zeros will be written to the disk for the entire length of the write. To zero out a range of the file and maintain sparseness, use FSCTL_SET_ZERO_DATA.

A sparse aware application may also set an existing file to be sparse. If an application sets an existing file to be sparse, it should then scan the file for regions which contain zeros, and use FSCTL_SET_ZERO_DATA to reset those regions, and possibly deallocate some physical disk storage. An application upgraded to sparse file awareness should perform this conversion.

When you perform a read operation from a zeroed-out portion of a sparse file may not read from the hard drive. Instead, the system recognizes that the portion of the file to be read contains zeros, and it returns a buffer full of zeros without actually reading from the disk.

As with any other file, the system can write data to or read data from any position in a sparse file. Nonzero data being written to a previously zeroed portion of the file may result in allocation of disk space. Zeros being written over nonzero data (with FSCTL_SET_ZERO_DATA) may result in a deallocation of disk space.

Note  It is up to the application to maintain sparseness by writing zeros with FSCTL_SET_ZERO_DATA.

Note  Defragmenting tools which handle compressed files on NTFS file systems will correctly handle sparse files on NTFS 5.0 volumes.
楼主何不使用 Process Monitor 实时监视文件系统、注册表、进程、线程和 DLL 活动。 http://www.microsoft.com/china/technet/sysinternals/utilities/processmonitor.mspx 或 WinAPIOverridehttp://jacquelin.potier.free.fr/winapioverride32/ 监视迅雷建立大文件时都调用了哪些Win API呢?
失散糖 2015-03-31
  • 打赏
  • 举报
回复
这种文件,是叫稀疏文件来着?
失散糖 2015-03-31
  • 打赏
  • 举报
回复
引用 2 楼 Sandrer 的回复:
用内存映射, 它也会帮你把文件里面的数据清零, 但速度飞快
#include "stdafx.h"
#include <tchar.h>

int main()
{
    HANDLE hFile;
    HANDLE hMap;
    DWORD dwTimer;
    WCHAR szOutput[128];

    dwTimer = GetTickCount();
    hFile = CreateFile(L"E:\\Test.bin", GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile != INVALID_HANDLE_VALUE)
    {
        hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 2, 0, NULL);
        CloseHandle(hMap);
        CloseHandle(hFile);
    }

    swprintf_s(szOutput, 128, L"Timer: %d\n", GetTickCount() - dwTimer);
    OutputDebugStringW(szOutput);

	return 0;
}
上面的代码, 建立一个 8GB 的文件, 用时为 0
一样的
extern "C" int __cdecl _fseeki64(FILE *, __int64, int);
我在的时候,仍然很耗时
    if (FILE *stream = ::fopen ("E:/Test.bin", "rb+"))
    {
        ::_fseeki64 (stream, 0x1FFFFFFFF, SEEK_SET);
        ::fwrite ("!", 1, 1, stream);
        ::fclose (stream);
    }
经历过一次耗时的更新之后,再次尝试文件结尾处修改文件内容的时候,就是瞬间完成了。 也就是说,这个方法建立的文件仍然是假的,经过耗时的更新之后,文件才变成真的。
失散糖 2015-03-31
  • 打赏
  • 举报
回复
完成了,测试代码如下: (姑且算是测试,所以并没有加严格的错误处理) (当然也没有注释,因为这是抄迅雷的思路,各个API的调用顺序都一样的,其中的原理完全不知道)

#include <stdio.h>
#include <windows.h>

static void open_undefined( const char *file_name, __int64 file_size )
{
    HMODULE module = ::GetModuleHandle ("kernel32");

    typedef BOOL (WINAPI *sfvd) ( HANDLE hFile, LONGLONG ValidDataLength);
    sfvd SetFileValidData = (sfvd) ::GetProcAddress (module, "SetFileValidData");

    HANDLE token = 0;
    ::OpenProcessToken (INVALID_HANDLE_VALUE, TOKEN_ALL_ACCESS, &token);

    // SE_MANAGE_VOLUME_NAME = "SeManageVolumePrivilege"
    TOKEN_PRIVILEGES tp = { 0 };
    ::LookupPrivilegeValue (0, "SeManageVolumePrivilege", &tp.Privileges->Luid);

    tp.PrivilegeCount = 1;
    tp.Privileges->Attributes = SE_PRIVILEGE_ENABLED;
    ::AdjustTokenPrivileges (token, 0, &tp, sizeof (tp), 0, 0);

    HANDLE file = ::CreateFile (file_name, GENERIC_WRITE, 0, 0, CREATE_NEW, 0, 0);

    if (file != INVALID_HANDLE_VALUE)
    {
        LONG size_lo = (LONG) file_size;
        LONG size_hi = (LONG) (file_size >> 32);
        ::SetFilePointer (file, size_lo, &size_hi, FILE_BEGIN);
        ::SetEndOfFile (file);
        SetFileValidData (file, file_size);
        ::CloseHandle (file);
    }

    ::CloseHandle (token);

    return;
}

extern "C" int __cdecl _fseeki64( FILE *stream, __int64 offset, int origin);

int main()
{
    const char *file_name = "undefined.flat";
    const __int64 file_size = 0x123456789;
    ::remove (file_name);
    ::open_undefined (file_name, file_size);

    if (FILE *stream = ::fopen (file_name, "rb+"))
    {
        ::fseek (stream, 0x1FE, SEEK_SET);
        ::fwrite ("\xAA\x55", 2, 1, stream);
        ::_fseeki64 (stream, -1, SEEK_END);
        ::fwrite ("\r", 1, 1, stream);
        ::fclose (stream);
    }

    return 0;
}

在Win7下NTFS分区中的运行效果,秒间完成,创建的文件,内容全是乱码,估计是之前删除过的文件的残渣。 在FAT32分区中,把文件尺寸改成小于4G,同样可以秒间完成,同样内容全是乱码。
Sandrer 2015-03-31
  • 打赏
  • 举报
回复
用内存映射, 它也会帮你把文件里面的数据清零, 但速度飞快
#include "stdafx.h"
#include <tchar.h>

int main()
{
    HANDLE hFile;
    HANDLE hMap;
    DWORD dwTimer;
    WCHAR szOutput[128];

    dwTimer = GetTickCount();
    hFile = CreateFile(L"E:\\Test.bin", GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile != INVALID_HANDLE_VALUE)
    {
        hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 2, 0, NULL);
        CloseHandle(hMap);
        CloseHandle(hFile);
    }

    swprintf_s(szOutput, 128, L"Timer: %d\n", GetTickCount() - dwTimer);
    OutputDebugStringW(szOutput);

	return 0;
}
上面的代码, 建立一个 8GB 的文件, 用时为 0
赵4老师 2015-03-31
  • 打赏
  • 举报
回复
安装比如MSDN2008 循ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/fileio/fs/setfilevaliddata.htm中的链接看且搜相关关键词。
jiht594 2015-03-31
  • 打赏
  • 举报
回复
引用 15 楼 sugar13 的回复:
@zhao4zhong1 以前我在FAT32文件系统,用手动破坏文件分配表的方式,实现过上述的功能,能够快速建立3.99G的大文件,文件内容是乱码,但是破坏力太大,得修复文件系统才行…… 我现在希望的是通过“合法”的系统调用完成这个功能,不必考虑文件系统类型,不必考虑文件路径中可能含有的用例如mklink建立的目录软链接。 AdjustPrivileges()直接用好像不行,仍然是错误码1314,令牌的句柄和文件的句柄是如何关联起来的呢?
你用的是SE_MANAGE_VOLUME_NAME权限吗
失散糖 2015-03-31
  • 打赏
  • 举报
回复
@zhao4zhong1 以前我在FAT32文件系统,用手动破坏文件分配表的方式,实现过上述的功能,能够快速建立3.99G的大文件,文件内容是乱码,但是破坏力太大,得修复文件系统才行…… 我现在希望的是通过“合法”的系统调用完成这个功能,不必考虑文件系统类型,不必考虑文件路径中可能含有的用例如mklink建立的目录软链接。 AdjustPrivileges()直接用好像不行,仍然是错误码1314,令牌的句柄和文件的句柄是如何关联起来的呢?
赵4老师 2015-03-31
  • 打赏
  • 举报
回复
SetFileValidData Function Sets the valid data length of the specified file. Important The file cannot be on a network drive, or be compressed, sparse, or transacted. The SetFileValidData function sets the logical end of a file. To set the size of a file, use the SetEndOfFile function. The physical file size is also referred to as the end of the file. BOOL WINAPI SetFileValidData( __in HANDLE hFile, __in LONGLONG ValidDataLength ); Parameters hFile A handle to the file. The file must have been opened with the GENERIC_WRITE access right, and the SE_MANAGE_VOLUME_NAME privilege enabled. The file cannot be a network file, or be compressed, sparse, or transacted. For more information, see File Security and Access Rights. ValidDataLength The new valid data length. This parameter must be a positive value that is greater than the current valid data length, but less than the current file size. Return Value If the function succeeds, the return value is nonzero. If the function fails, the return value is 0 (zero). To get extended error information, call GetLastError. Remarks Typically, the SetFileValidData function is used by system-level applications on their own private data. Not all file systems use valid data length. Some file systems can track multiple valid data ranges. In general, most applications will never need to call this function. A caller must have the SE_MANAGE_VOLUME_NAME privilege enabled when opening a file initially. Applications should only call SetFileValidData on files that restrict access to those entities that have SE_MANAGE_VOLUME_NAME access. The application must ensure that the unwritten ranges of the file are never exposed, or security issues can result. For more information, see Running with Special Privileges. Each file stream has the following: File size: the size of the data in a file, to the byte. Allocation size: the size of the space that is allocated for a file on a disk, which is always an even multiple of the cluster size. Valid data length: the length of the data in a file that is actually written, to the byte. This value is always less than or equal to the file size. The SetFileValidData function allows you to avoid zero-ing data when writing non-sequentially to a file. The function makes the data in the file valid without writing to the file. You can use the SetFileValidData function to create large files where performance is important. Call this function to skip the time that it takes to fill a file with 0 (zeroes) when the file is created or extended. Simply set the valid data length. Requirements Client Requires Windows Vista or Windows XP. Server Requires Windows Server 2008 or Windows Server 2003. Header Declared in WinBase.h; include Windows.h. Library Use Kernel32.lib. DLL Requires Kernel32.dll. See Also File Management Functions SetEndOfFile Send comments about this topic to Microsoft Build date: 8/15/2007
赵4老师 2015-03-31
  • 打赏
  • 举报
回复
引用 10 楼 sugar13 的回复:
@zhao4zhong1 迅雷是用 SetFilePointer + SetEndOfFile + SetFileValidData的方式建立大文件的,其中SetFileValidData又是通过调用GetModuleHandleW + GetProcAddress动态加载的,但是我调用SetFileValidData的时候,函数总是返回FALSE,错误码1314,意为客户端没有所需的特权。。 重新监视,发现迅雷打开文件之前,通过LookupPrivilegeValue + AdjustTokenPrivileges的方式,大概是在设置权限或是令牌什么的。请问这俩函数要怎么用呢?
谦虚使人进步!
bool AdjustPrivileges() {
    HANDLE hToken;
    TOKEN_PRIVILEGES tp;
    TOKEN_PRIVILEGES oldtp;
    DWORD dwSize=sizeof(TOKEN_PRIVILEGES);
    LUID luid;

    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
        if (GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) return true;
        else return false;
    }
    if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)) {
        CloseHandle(hToken);
        return false;
    }
    ZeroMemory(&tp, sizeof(tp));
    tp.PrivilegeCount=1;
    tp.Privileges[0].Luid=luid;
    tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
    /* Adjust Token Privileges */
    if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &oldtp, &dwSize)) {
        CloseHandle(hToken);
        return false;
    }
    // close handles
    CloseHandle(hToken);
    return true;
}
赵4老师 2015-03-31
  • 打赏
  • 举报
回复
大文件是大文件 稀疏文件是稀疏文件 楼主怎么死不改悔呢?! 5楼我贴的内容楼主不看是吧!
失散糖 2015-03-31
  • 打赏
  • 举报
回复
@Sandrer 创建文件之后,我希望能够用fopen系列函数,普普通通的操作文件。至于耗时操作,基本上都是几十秒到几分钟,这个耗时并不是把要写的内容复制给系统什么的耗时,而是说系统把稀疏文件转化成普通文件时,给文件占用的扇区进行清零的耗时。因为测试程序卡在了fwrite里面,所以任务管理器都没有办法把那个耗时的测试程序强制终止。
失散糖 2015-03-31
  • 打赏
  • 举报
回复
@zhao4zhong1 迅雷是用 SetFilePointer + SetEndOfFile + SetFileValidData的方式建立大文件的,其中SetFileValidData又是通过调用GetModuleHandleW + GetProcAddress动态加载的,但是我调用SetFileValidData的时候,函数总是返回FALSE,错误码1314,意为客户端没有所需的特权。。 重新监视,发现迅雷打开文件之前,通过LookupPrivilegeValue + AdjustTokenPrivileges的方式,大概是在设置权限或是令牌什么的。请问这俩函数要怎么用呢?
Sandrer 2015-03-31
  • 打赏
  • 举报
回复
引用 7 楼 sugar13 的回复:
@zhao4zhong1 我在意的不是文件的大小,哪怕只是1个字节大小的文件,只要系统帮忙把这一个字节占用的扇区给我分配出来就好了,哪怕这文件的这一个字节的内容是未定义的内容,乱码什么的都无所谓。 提到大文件,是说这种想法通常都是用来建立大文件来的,小文件也就不在意系统好心帮忙的清零操作耗时了。 提到稀疏文件,是说用SetFilePointer + SetEndOfFile或者CreateFileMapping的方式创建的文件应该属于稀疏文件。
正常读写大文件,还是用文件映射来操作的 普通的文件读写操作在系统内核是需要复制两次,才能从文件到用户内存,或者从用户内存到文件 而文件映射则省了一次复制过程,所以比正常文件读写api要快 而且系统内部的粘贴板、本机命名管道、本机网络通讯、窗口消息的传递等等这些,在内核也是以文件映射的方式来操作
Sandrer 2015-03-31
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include <tchar.h>
 
int main()
{
    HANDLE hFile;
    HANDLE hMap;
    PDWORD pView;
    ULONGLONG ullOffset;
    int i = 0;
    DWORD dwTimer;
    WCHAR szOutput[128];
 
    dwTimer = GetTickCount();
    hFile = CreateFile(L"E:\\Test.bin", GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile != INVALID_HANDLE_VALUE)
    {
        hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 2, 0, NULL);
        if (hMap != NULL)
        {
            ullOffset = (2i64 << 32) - 65536;
            pView = (PDWORD)MapViewOfFile(hMap, FILE_MAP_WRITE, ullOffset >> 32, ullOffset & 0xffffffff, 65536);
            for (i = 0; i < 65536 / sizeof(DWORD); i++)
                *(pView + i) = i;

            UnmapViewOfFile(pView);
        }

        CloseHandle(hMap);
        CloseHandle(hFile);
    }
 
    swprintf_s(szOutput, 128, L"Timer: %d\n", GetTickCount() - dwTimer);
    OutputDebugStringW(szOutput);
 
    return 0;
}
这段代码除了创建文件映射外,还在文件末尾 65536 个字节中写入数据 用时 16 毫秒,我想不明白你所说的等待很久是有多久
    hFile = CreateFile(L"E:\\Test.bin", GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile != INVALID_HANDLE_VALUE)
    {
        hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
        if (hMap != NULL)
        {
            ullOffset = (2i64 << 32) - 65536;
            pView = (PDWORD)MapViewOfFile(hMap, FILE_MAP_WRITE, ullOffset >> 32, ullOffset & 0xFFFFFFFF, 65536);

            UnmapViewOfFile(pView);
        }

        CloseHandle(hMap);
        CloseHandle(hFile);
    }
这段代码是用来检查数据是否成功写入的,在 UnmapViewOfFile(pView); 设断点然后查看 pView 的内存,数据也是成功写入了的
加载更多回复(1)
傲游3浏览器是国内唯一具有独立内核的桌面浏览器产品,首创双核浏览模式,在安全、快速的基础上,保证了对网银、网购类网站的兼容性。傲游3浏览器内置云端广告过滤系统,强大而易用,确保用户在浏览网页时不受任何广告的骚扰。 傲游3浏览器界面简洁美观,布局合理。傲游3功能丰富,拥有在线收藏、鼠标手势、广告过滤、智能地址栏、多重搜索、页面截图、即时翻译等数十种实用功能,并且独有"快应用"、"团购指数"等创新性功能,充分让用户体验到基于新式浏览器的一站式互联网服务的魅力。 北京傲游(Maxthon)天下科技有限公司是一家国际化科研企业,在硅谷、香港等地设立有分公司。傲游旨在通过浏览器向用户提供全面的一站式互联网服务,产品覆盖桌面、手机、平板、机顶盒等平台,在全球范围内拥有几千万活跃用户。傲游致力于技术研发,于2009年10月28日在北京成立国内最大的专业浏览器研发中心,并在2010年8月份发布了国内首个独立核心浏览器产品:傲游3。目前傲游浏览器产品语言版本多达37种,遍布120个国家和地区,是国产软件走向世界的排头兵。 傲游浏览器3.1.8.1000 本次更新包含的新特性有: + 用户选择 "使用鼠标右键关闭标签" 后, 可以按住 Shift 在标签上点击右键打开标签内容菜单. 本次更新优化了下列功能: * 大幅增强极速核心的网页兼容性. 本次更新解决了如下问题: [主框架] * 解决同时按下 Alt + Ctrl + ESC 时, 浏览器失去响应的问题. * 重置所有选项后, 快速保存图片的路径会消失. * 已锁定的标签会干扰关闭全部标签的动作, 使其左侧的标签无法被关闭. * 调整侧边栏大小会使侧边栏失去焦点. [Webkit 核心] * 拖动某些网页中的图片会弹出下载. * 在网页内的文本框中选择文本, 鼠标右键菜单中没有 "粘贴" 项目. [用户界面] * 某些情况下, 取消 "后台标签显示关闭按钮" 后, 按钮依旧会显示, 切换标签后消失. * 在资源嗅探器中, 资源URL过长时, Tooltip 会出现滚动条. * 自定义界面的设置无法对新建的窗口生效. [智能地址栏] * 无论如何设置, 从地址栏打开的网页总会激活新标签. [智能填表] * 在输入框下拉菜单选择通用填表项时, 输入框会失去焦点. [迅雷下载模块] * 在英文系统下, 第一次启动傲游迅雷加速下载时语言显示不正确. * 关闭浏览器时迅雷下载模块可能会崩溃. 傲游浏览器3.1.7.1000 本次更新包含如下新特性: + 支持HTML5特性: Skydrive 直接拖拽添加上传文件, Gmail/163等邮件直接拖拽添加附件. 本次更新优化了下列功能: * 优化数据同步逻辑. * 优化内核启动速度. * 傲游迅雷加速下载使用新界面. 本次更新解决的问题如下: [主框架] * 没有启用老板键时, 点击任务栏托盘区的图标无效. * 某些情况下会出现无效的浏览历史条目. * 非自动登录情况下自定义界面设置无法保存. [Webkit 核心] * 运行迅雷, 有道词典或灵格斯划词翻译时, 浏览器可能会失去响应. * 解决一些核心崩溃的问题. * 增强核心兼容性. * 选中一段图文混排的文字, 在图片上点击鼠标右键的时候, 不会出现 "复制" 项目. [Trident 核心] * 兼容模式 window.open 未利用空白页. [用户界面] * 解决某种情况下侧边栏显示错误的问题. * 嗅探器的选择框在没有嗅探到内容的情况下, 勾选后无法取消. * 解决一些傲游迅雷加速下载的界面和语言问题. [侧边栏] * 浏览器登录时, 会重置侧边栏微博扩展的登录状态. [下载] * 傲游迅雷加速下载可能出现高资源占用率. * 增强傲游迅雷加速下载文件的兼容性. [资源嗅探器] * 批量下载显示错乱. [开发者工具] * 在网页中开启审查元素, 使用鼠标右键菜单保存图片, 会保存为 HTML 文件. 傲游浏览器3.1.6 正式版 3.1.6.1000 2011-08-25 本次更新包括下列优化: * 优化浏览器启动速度. * 优化页面 gif 动画播放效率. 本次更新对修复了以下问题: [Webkit 核心] * 解决一些页面兼容性问题. * 解决一些崩溃问题. * 从 WebSite-Watcher 调用傲游3, 打开保存在本地的网页时会出现 404 错误. * 对特殊字符转码问题会导致页面出现 404 错误. * 个别用户的图片另存为对话框无法弹出. * 在 Google+ 页面点击 "Start a Hangout" 后, 弹出 C++ Runtime 错误. * 点击 Facebook 连接提示登录. [主框架] * 解决部分系统中浏览器无法启动的问题. * 非自动登录浏览器帐号的情况下, 浏览器的侧边栏状态无法保存. * 用任务栏图标切换到傲游 3 窗口会出现焦点问题. [用户界面] * 使用数字键盘快捷键缩放网页时, 状态栏的缩放按钮显示数值不会变化. [收藏] * 在收藏栏中的 "更多收藏" 中, 进行快捷组和文件夹的转换时会有延迟. * 某些情况下收藏栏文件夹的鼠标右键菜单会出现闪烁. [下载] * 极速模式直接打开某些 FTP 下载链接时, 会提示无法连接到网站. [资源嗅探器] * 有时修改语言会导致嗅探器中的资源列表消失. [数据同步] * 不编辑过滤规则点击 "应用" 时, 会错误的进行同步. [阅读模式] * 已经隐藏的工具条仍然响应鼠标事件. * 增强阅读模式兼容性. * 某些情况下页面不响应鼠标动作. 傲游浏览器3.1.5 正式版 + 加入我的魔盒(即外部工具), 入口位于快速工具栏, 用户可以从魔盒中快速调用计算器, 画图等系统工具, 还可以加入自定义的工具. + 工具栏及侧边栏支持通过鼠标拖拽调整顺序. + 拼写检查支持10种语言, 中文版不包含此功能. + 中文侧边栏加入新浪微博扩展. + 加入恶意网址拦截计数, 傲游时刻确保用户的网络浏览安全. * 优化标签切换性能. * 优化极速模式内存占用 * 滚动条体验增强 * 为截图工具条添加了拖拽手柄. 傲游浏览器3.1.4 正式版 启用全新设计的快速访问, 用户可以自定义背景图, 可定义最多9页快速访问内容。 添加了打印预览功能。 标签自动刷新可以指定时间。 超级截图现在能够识别窗体 添加一款标签下置皮肤, 基于现代风格定制。 3.1.3.2000 2011-07-14 本次更新解决了以下问题 主框架 设置stunnel类型的代理后, 记事本不能同步. Webkit 核心 使用鼠标右键菜单中的复制在网页上复制文字的时候, 粘贴到记事本中会丢失换行符. 收藏 从收藏栏一次性打开某文件夹下所有收藏项目时,标签的顺序与收藏的顺序相反. 傲游浏览器3.1.3 正式版 [阅读模式] 可以使用左右方向键进行翻页, 使用上下方向键进行滚屏. [超级截图] 为气泡添加了白色背景. 文字框可以拖动. 放大镜坐标改成截图尺寸. 傲游3.1.2.1000正式版重要更新: 英文拼写检查 英文拼写检查可以在你输入过程中提示可能有错误的英文单词, 用红色波浪线进行标注, 在标注上点击鼠标右键可以看到词库的拼写建议. 当然你也可以把自造词或者词库中没有的单词加入词库 最易用的广告过滤规则分享与安装 通过广告过滤规则分享功能,用户可以轻松分享自己独有的广告过滤规则。过滤规则的安装方式也大幅简化,用户只需复制规则,傲游3浏览器即可自动判断,并且进行安装。 历史日历 按Ctrl+H,可以打开傲游3的历史,本次更新在历史中添加了历史日历功能,通过此功能可以直接转跳到特定的日期的历史。日历格式与普通日历一致,以月为单位,便于用户查找、定位。 自动刷新 在标签上点击右键,即可设置自动刷新选项,刷新间隔为5秒、10秒、30秒三个档次。自动刷新功能可以保持网页在最新状态,以便用户随时查询。 3.1.1.600_Beta本次更新加入的特性有: Webkit核心 加入英文拼写检查功能,支持通过鼠标右键菜单添加用户词典. 标签 标签的右键菜单加入了"自动刷新"功能. 侧边栏 中文版侧边栏加入游戏及团购的快速入口. 侧边栏使用扩展方式实现,高级用户可以通过"%appdata%\Maxthon3\Addons\"下的扩展包,自定义侧边栏按钮以及内容. 历史管理器 加入日历视图 广告过滤 加入广告过滤的分享及自动安装功能 本次更新包括以下功能优化: 同步 同步中心支持是否启用收藏同步 团购点评 团购点评图标更新,显示评论数. Flash 内建Flash插件更新至10.3.181.26 本次更新解决了下列问题: 主框架 修正设置快速保存目录时可能会出现的程序崩溃. 切换代理后不会立即生效. WindowsXP系统下,使用IE6核心时,淘宝商城订单页面自动跳转为兼容模式,会显示"无法购买". 解决在部分团购网站无法顺利支付的问题. 解决拍拍网使用中信银行无法顺利支付的问题. 安全 修正WebkitBugzilla52688安全问题. Webkit核心 解决一个历史文件导致登录崩溃的问题. 在某些网站密码框中无法正确屏蔽密码. 在Facebook点击图片或视频进入影院模式,点击关闭按钮后浏览器显示的页面不正常. Facebook照片关闭时,会回到个人主页. 点击某些网页上的连接,地址栏不会改变. 无法在某些Flash中输入中文. 某些网页会无故跳转到手机版. Trident核心 某些网页上的操作会导致无故多开一个页面. 用户界面 WindowsXP系统下启动浏览器侧边栏显示异常. 选项 不自动登录账户的情况下,登录账户后,"只允许打开一个浏览器窗口"选项不起作用 智能地址栏 输入法上屏的字母地址栏不会自动补全. 下载 下载意外断开后,恢复下载时会出现问题. 下载路径异常时可能会建立一个无法正常删除的文件夹. http://bbs.maxthon.cn/viewthread.php?tid=507136 开发者工具 在www.yahoo.com中使用审查元素,首次总是定位在标签上. 有时首次点击审查元素时无法定位. 傲游浏览器3.1.1 正式版 Webkit 升级至 534.12 , 综合性能提升 32.6% JavaScript 引擎升级综合性能提升20%. 加入团购点评功能, 傲游团购点评网站同步上线 http://tuan.maxthon.cn/dianping/ 加入同步中心 加入团购点评功能, 傲游团购点评网站同步上线 http://tuan.maxthon.cn/dianping/ 加入同步中心 支持皮肤文件(*.mxskin)关联, 加入皮肤管理器 自动订阅常用网站过滤规则及全局规则 大幅优化了浏览器的性能与稳定性 傲游浏览器3.0.24.1000 正式版 在菜单>>视图>>自定义界面中加入"工具按钮"项目 在多重搜索中加入比价搜索 加入快递查询功能 现在点击"打开", 目标将会被存入临时目录 增加是否启用多窗口的选项 支持查看 cookie 扩充了安全网址认证库 优化标签打开、切换、关闭性能 增强了收藏同步协议, 支持了更多的网络环境 支持填表和保存表单的快捷键、鼠标手势自定义 右键"目标另存为"对话框采用系统风格

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧