我的操作系统和驱动器是
OS: Windows XP sp2 or Linux SUSE 9 or Cygwin
Compiler: Visual C++ 2003 or Gcc or Cygwin
PC and os are both 32 bits
Run Code Online (Sandbox Code Playgroud)
那么,如何在秒中创建一个超大文件
有人告诉我使用MappingFile函数.我没能创建超过2G的文件所以...你的热烈回应将非常感谢谢谢
我有一个设备将数据发送到COM端口.我想在没有插入时模拟这个设备.我认为这可以通过简单地将数据发送到特定的COM端口来实现:
int main() {
char *port = "\\\\.\\COM40";
HANDLE hCom = CreateFile(port, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hCom==INVALID_HANDLE_VALUE) return 0;
DWORD writeBytes;
int buffer = 0xDEADBEAF;
BOOL success = WriteFile(hCom, &buffer, 4, &writeBytes, NULL);
FlushFileBuffers(hCom);
Sleep(1000);
HANDLE hCom2 = CreateFile(port, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hCom2==INVALID_HANDLE_VALUE) return 0; // Exit. GetLastError() == 5
DWORD readBytes;
success = ReadFile(hCom2, &buffer, 4, &readBytes, NULL);
CloseHandle(hCom);
CloseHandle(hCom2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,第二个 …
我试图利用CreateFile函数来访问目录信息。我收到的Win32错误代码为5,这意味着访问被拒绝。请指教。
CreateFile(path, GENERIC_READ, FILE_SHARE_READ, IntPtr.Zero, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, IntPtr.Zero);
Run Code Online (Sandbox Code Playgroud)
这是正在进行的调用,如文档中所述,正在使用“ FILE_FLAG_BACKUP_SEMANTICS”。DLL导入似乎工作正常,如下所示:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr CreateFile(string filename,
uint desiredAccess,
uint sharedMode,
IntPtr securityAttributes,
uint creationDisposition,
uint flagsAndAttributes,
IntPtr templateFile);
Run Code Online (Sandbox Code Playgroud)
更新:我需要获取目录的句柄,以便可以使用GetFileInformationByHandle()并提取唯一的ID。该方法当前适用于文件,当前不适用于目录。
更新:这个问题的X是我需要一个目录的唯一标识符,该标识符不是其绝对路径。即使目录已移动或重命名,它也必须保持不变。如上所述,.NET不提供任何唯一标识符,只能使用win32来实现。
这就是我想要做的.我有一系列报告,他们也希望能够以逗号分隔的文本文件下载.我已经阅读过一堆页面,人们说这些页面只是回显结果而不是创建文件,但是当我尝试它只是输出到它们所在的页面时.
我以每份报告的形式提供此信息
Export File<input type="checkbox" name="export" value="1" />
Run Code Online (Sandbox Code Playgroud)
所以在帖子上我可以检查他们是否正在尝试导出文件.如果他们是我试图这样做:
if($_POST['export'] == '1')
{
$filename = date("Instructors by DOB - ".$month) . '.txt';
$content = "";
# Titlte of the CSV
$content = "Name,Address,City,State,Zip,DOB\n";
for($i=0;$i<count($instructors);$i++)
$content .= ""; //fill content
fwrite($filename, $content);
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Length: ". filesize("$filename").";");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Type: application/octet-stream; ");
header("Content-Transfer-Encoding: binary");
readfile($filename);
}
Run Code Online (Sandbox Code Playgroud)
基本上页面刷新,但没有文件被推下载.任何人都可以指出我错过了什么?
编辑 我想我并不完全清楚.这不在仅创建和下载文件的页面上,这是在同时显示报告的页面上.所以当我放一个exit(); 在readfile之后,页面的其余部分加载空白.我还需要在此页面上显示报告.我认为这也可能与它为什么不下载有关,因为这个页面已经发送了头信息.
我编写了以下批处理文件来使用FOR循环创建多个文件:
@echo off
cls
FOR /L %%i IN (1 1 10) DO (
echo.> file%%i.txt
IF ERRORLEVEL 0 echo Successfully created file 'file%%i.txt'.
)
dir /b *.txt
FOR %%i IN (*.txt) DO (
echo.> file%%i.txt
IF ERRORLEVEL 0 echo Successfully created file 'file%%i.txt'.
)
这里,在第一个FOR循环中创建了10个文件(即file1.txt.... file10.txt).
在第二个FOR循环中,我使用这些文件来构建下一个新文件的名称.(即filefile1.txt.txt... filefile10.txt.txt)
但是,正在创建一个额外的文件:
导致创建这个额外文件的逻辑问题是什么?filefilefile1.txt.txt.txt
我写了一个尝试创建文件的方法.但是我设置了标志CREATE_NEW,因此它只能在它不存在时创建它.它看起来像这样:
for (;;)
{
handle_ = CreateFileA(filePath.c_str(), 0, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_HIDDEN | FILE_FLAG_DELETE_ON_CLOSE, NULL);
if (handle_ != INVALID_HANDLE_VALUE)
break;
boost::this_thread::sleep(boost::posix_time::millisec(10));
}
Run Code Online (Sandbox Code Playgroud)
这应该是正常的.现在我想把它移植到linux,当然CreateFile函数只适用于windows.所以我在寻找与此相当的东西,但在Linux上.我已经看过open()但是我似乎找不到像CREATE_NEW一样的标志.有谁知道这方面的解决方案?
我想知道是否这个代码片段:
HANDLE fhandle = CreateFile("something.c", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE mapping = CreateFileMapping(fhandle, NULL, PAGE_READONLY, 0, 0, NULL);
LPVOID map_view = MapViewOfFile(mapping, FILE_MAP_READ, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)
以下释放对象的顺序有效:
CloseHandle(mapping);
CloseHandle(fhandle);
UnmapViewOfFile(contents);
Run Code Online (Sandbox Code Playgroud)
即我可以先关闭文件句柄然后再打电话UnmapViewOfFile吗?
我知道执行顺序CloseHandle(mapping)和UnmapViewOfFile(contents)无关紧要,但是关闭文件句柄呢?
我问,因为我只想使用map_view析构函数的指针.在我看来,这是有效的,文件一直保持到UnmapViewOfFile调用,但也许这可能会导致一些奇怪的行为?
我有一个程序,用户可以在其中注册我的程序,并为他们创建一个文本文件。我尝试过使用 CreateFile 函数,但不确定参数。当每个用户使用此功能或任何其他功能注册时,如何为他们创建一个文本文件?
CreateFile上的MSDN页面说:该字符串"\\.\C:\"可用于打开C:卷的文件系统.但是,以下代码始终返回错误:ERROR_PATH_NOT_FOUND.
HANDLE h = CreateFile(L"\\\\.\\C:\\", FILE_READ_ATTRIBUTES,
FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, 0, OPEN_EXISTING, 0, 0);
Run Code Online (Sandbox Code Playgroud)
我应该如何正确传递参数?
我正在尝试使用windows.CreateFile()函数创建文件(有关参考,请参阅https://godoc.org/golang.org/x/sys/windows#CreateFile和https://docs.microsoft.com/en-us/windows/ win32/api/fileapi/nf-fileapi-createfilew ) 在 Golang 1.14 中。除了代码有效之外,我显然file Name为CreateFile().
代码是:
package main
import (
"unsafe"
"golang.org/x/sys/windows"
)
func main() {
var (
nullHandle windows.Handle
filename string = "test_file"
)
strptr := &filename
fileNamePtr := (*uint16)(unsafe.Pointer(strptr))
dwShareMode := uint32(windows.FILE_SHARE_READ | windows.FILE_SHARE_WRITE | windows.FILE_SHARE_DELETE)
dwFlagsAndAttributes := uint32(windows.FILE_FLAG_DELETE_ON_CLOSE)
windows.CreateFile(fileNamePtr, windows.GENERIC_WRITE, dwShareMode, nil, windows.CREATE_NEW, dwFlagsAndAttributes, nullHandle)
}
Run Code Online (Sandbox Code Playgroud)
我得到了一个用非 ascii 字符创建的文件(在这种情况下?R)
Directory of C:\Users\rodrigo\src\delete_on_close
04/30/2020 03:15 PM <DIR> .
04/30/2020 03:15 PM <DIR> ..
04/30/2020 …Run Code Online (Sandbox Code Playgroud) createfile ×10
winapi ×4
c++ ×2
linux ×2
windows ×2
batch-file ×1
c ×1
c# ×1
delphi ×1
directory ×1
download ×1
file ×1
file-mapping ×1
filesystems ×1
for-loop ×1
go ×1
php ×1
shell ×1