标签: createfile

Delphi XE中的CreateFile/WriteFile api

我们使用Below代码在LPT1端口中打印票证数据.这些代码在Win-7 Delphi-7 Exe中运行良好,但相同的代码不适用于Win-7 Delphi XE.我试过net中提供的解决方案.但它并没有帮助我解决问题.请你能为此提出任何解决方案.

function TdmDisneyCastTrac.SendToParallelPort(pContent : TStringList): boolean;
var
  slPrintLines : TStringList;
  hFile : THandle;
  Overlapped : TOverlapped;
  I : integer;
  bContentPrinted : boolean;
  dw : DWORD;
begin
   slPrintLines := TStringList.Create;
   result := True;
   try
      slPrintLines.AddStrings(pContent);
      FillChar(Overlapped, SizeOf(Overlapped),0);
      I := 0;
      repeat
         hFile := INVALID_HANDLE_VALUE;
         bContentPrinted := True;
         hFile := CreateFile(PChar('LPT1:'), GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
         if hFile = INVALID_HANDLE_VALUE then
            bContentPrinted := False
         else
         begin
            Overlapped.hEvent := CreateEvent(nil, False, False, nil);
            if Overlapped.hEvent = 0 then …
Run Code Online (Sandbox Code Playgroud)

delphi createfile

0
推荐指数
1
解决办法
8446
查看次数

NTFS + CreateFile:在路径名中指定流偏移量?

通过打开NTFS文件数据流时,是否可以在路径名中指定流偏移量CreateFile

如果pathname以\\?\?开头怎么办?

例如,abcd.txt::$DATA指定未命名流*的偏移量0; 是否可以在路径名**中指定不同的偏移量?

*从技术上讲,这也意味着偏移量等于流长度,以防WriteFile附加**而不使用SetFilePointer

winapi ntfs path filepath createfile

0
推荐指数
1
解决办法
62
查看次数

C++ #define LPWSTR?

好的,我的程序有问题.我之前提出过一个问题,但没有人真正理解我的问题,所以我这次尝试一种新方法.

如果你很好奇,这是我的问题:

我的程序以形式接受参数char* argv[],并且我无法指向正在argv[1]使用的任何东西LPWSTR,因为它只指向const wchar_t*对象.

这是一个新的事情,我试图解决我的问题(我已经尝试了多种东西,但我需要知道如何做我想的,或者如果可能的话)

基本上,我的想法是#define某种功能,它可以接受任何内容,argv[1]const wchar_t*使用该值定义a .

像这样的东西:

#define path       ((const wchar_t*)argv[1])
Run Code Online (Sandbox Code Playgroud)

我不确定这是正确的方式(或者即使这是可能的)做我想做的事......

如果你有一个更好的方法来解决我的问题,请(请)告诉我如何帮助我,我一直在考虑这个很长的时间!

我的计划说明:

我正在制作一个接受争论的程序.参数是驱动器的名称,例如"F:".然后它使用CreateFile带驱动器号的函数.如果你去这里,看看函数的第一个参数,我想你会看到我的意思....问题是,对于我来说,制作一个LPWSTR,我需要一个const wchat_t*对象....我希望这一次我的问题很清楚,上次人们真的不明白我想要做什么.

无论如何,谢谢!编辑1:这里是解决我的程序的行(这是我必须做的工作,没有参数)(我在这里使用固定值)

int main()
{

HANDLE device;

device = CreateFile(L"\\\\.\\F:",    // Drive to open
    GENERIC_READ | GENERIC_WRITE,       // Access mode
    FILE_SHARE_READ | FILE_SHARE_WRITE, // Share Mode
    NULL,                   // Security Descriptor
    OPEN_EXISTING,          // How to create
    0,                      // File attributes
    NULL);  
}
Run Code Online (Sandbox Code Playgroud)

这是有参数(不起作用)

int main(int …
Run Code Online (Sandbox Code Playgroud)

c++ const createfile lpwstr

0
推荐指数
1
解决办法
467
查看次数

WinAPI ReadFile返回损坏的数据

我正在Visual C ++项目中编写一个函数,该函数以2000字节为增量通过WinAPI读取文件的内容,并将其作为std :: string返回。

当文件远大于缓冲区(例如100 KB)时,会出现问题,在有效数据中间,我在文件中的多个位置添加了垃圾。这是一个长0xcccccccc...序列,由3-4个其他字节终止,通常出现在一个单词的中间。否则,该功能不会失败,并且不会丢失任何有效数据。

我没有检查确切的位置,但似乎这发生在缓冲区大小增加(或缓冲区大小增加的乘数)上。如果我将缓冲区的大小增加到大于测试文件的大小,那么问​​题就消失了。是什么原因导致这种情况发生?我究竟做错了什么?

std::string read_file(std::string filename) {
    HANDLE hFile = CreateFile(filename.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
    if (hFile == INVALID_HANDLE_VALUE)
    {
        std::string errortext("Error opening " + filename + ", bad handle value: " + to_string((int)hFile));
        MessageBox(hwnd, errortext.c_str(), "Error", 0);
        return "";
    }
    char buffer[2000] = "";
    std::string entire_file = "";
    DWORD dwBytesRead = 0;

    while (ReadFile(hFile, buffer, sizeof(buffer), &dwBytesRead, NULL))
    {
        if (!dwBytesRead)
            break;
        entire_file += buffer;
    }
    CloseHandle(hFile);
    return entire_file;
}
Run Code Online (Sandbox Code Playgroud)

c++ winapi createfile visual-c++ readfile

-3
推荐指数
1
解决办法
81
查看次数

标签 统计

createfile ×4

c++ ×2

winapi ×2

const ×1

delphi ×1

filepath ×1

lpwstr ×1

ntfs ×1

path ×1

readfile ×1

visual-c++ ×1