标签: file-pointer

是否没有GetFilePointer(Ex)Windows API函数?

我正在尝试调试操作文件的程序.例如,我将文件指针设置为偏移量4(使用0的基数),但它似乎从偏移量5开始.

为了弄清楚发生了什么,我想在一行中打印出当前文件指针(我没有为这个小项目使用IDE,只是Notepad2和命令行).不幸的是,似乎没有Windows API函数来检索当前文件指针,只有一个来设置它.

我记得能够在Pascal中找到当前文件指针(在DOS中),但是如何在Windows中用C++确定当前文件指针?

c++ windows winapi visual-c++ file-pointer

5
推荐指数
1
解决办法
4752
查看次数

fscanf 是否将传递的文件指针向前移动?

我在某处看到过这段代码:

#include<stdio.h>

int main()
{
    FILE * fp;
    char s[1024];
    fp = fopen("file","r");

    while( fscanf(fp, "%s", s ) != EOF )
    {
        puts(s);
    }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我预计这将继续无限循环地打印文件的第一个单词。我相信文件指针被视为输入只是为了获取应该读取输入的点,而 fscanf 将有一个本地文件指针,它将用来读取文件。

但在运行时我意识到它实际上打印了整个文件。我能得出的唯一结论是,在读取第一个输入后,它实际上将传递的文件指针向前移动,否则它只会一次又一次地继续打印第一个单词。

我看到了fscanf 的man 文档,但在阅读后找不到有关文件指针移动的任何内容。

有人可以解释一下或给出一个来源,其中指定传递的文件指针在读取后实际上会移动吗?

c file-io scanf file-pointer

5
推荐指数
1
解决办法
2万
查看次数

如何获取“ print()”,“ os.system()”和“ subprocess.run()”输出同时显示在控制台和日志文件中?

最初,我有一个简单的程序将整个输出打印到控制台。

初始代码仅在控制台中显示输出

import os, subprocess

print("1. Before")
os.system('ver')                            
subprocess.run('whoami')        
print('\n2. After')
Run Code Online (Sandbox Code Playgroud)

在控制台中输出

1. Before

Microsoft Windows [Version 10]
user01

2. After
Run Code Online (Sandbox Code Playgroud)

然后,我决定在保持控制台原始输出的同时,在日志文件(log.txt)上复制一份。

因此,这是新代码。

import os, subprocess, sys

old_stdout = sys.stdout
log_file = open("log.txt","w")
sys.stdout = log_file

print("1. Before")          # This appear in message.log only, but NOT in console
os.system('ver')            # This appear in console only, but NOT in message.log
subprocess.run('whoami')    # This appear in console only, but NOT in message.log
print('\n2. After')         # This appear in message.log only, but NOT …
Run Code Online (Sandbox Code Playgroud)

python windows subprocess file-pointer python-3.x

5
推荐指数
0
解决办法
246
查看次数

使用fread功能:要读取的大小大于可读取的大小

我有个问题:

我正在使用fread来读取文件.

typedef struct {
    int ID1;
    int ID2;
    char string[256];
} Reg;

Reg *A = (Reg*) malloc(sizeof(Reg)*size);

size = FILESIZE/sizeof(Reg);

fread (A, sizeof(Reg), size, FILEREAD);
Run Code Online (Sandbox Code Playgroud)

使用循环,连续调用此调用,让我读取整个文件.

当我接近文件的末尾会发生什么,我无法读取"size"*sizeof(Reg),或者如果你只能读取这个数量的一半,那么我的数组A会发生什么.它会是完成?该函数将返回错误?

知道如何通过fread读取文件?

Edi1:确切地说,如果除法不精确的话,当我读到最后一点较小的文件大小时,我将读取未存档的内容,我想知道我的向量调整大小为我可以读取的字节数,或者发展更好的动态.

c fread file-pointer

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

如果文件打开,fopen() 返回文件指针什么?

例如,如果我们声明一个文件指针fp并打开一个文件,如下所示:
FILE* fp = fopen("filename","w");

如果文件未打开,fopen则返回NULL到文件指针fp。如果文件打开,文件指针中存储什么fp

c file-pointer

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

是否有指向空的文件指针(FILE*)?

出于某些原因,我需要一个指向任何内容的文件指针(FILE*).这意味着我可以将它传递给fprintf函数并且fprintf忽略文件指针.

例如:

void my_function()
{
  FILE* nothing = NULL; // NULL is not correct.
  int n = fprintf(nothing, "PI = %f", 3.14); // Note: When nothing = NULL, error ocured.
}
Run Code Online (Sandbox Code Playgroud)

是否有指向空的文件指针(FILE*)?

c++ file-pointer

2
推荐指数
2
解决办法
3451
查看次数

没有 fclose() 的 FILE * 重新分配好吗?

假设我有以下代码:

FILE *x = fopen("story.txt",r);
if(x!=NULL)
{
    x = fopen("story.txt",wb); /* <- Does this waste/leak memory ?? */
    /* ... do something .... */
    /* if(fclose(x)==EOF)...else... */
}
else
{
    printf("story.txt does not exist\n");
}
Run Code Online (Sandbox Code Playgroud)

在这里,我将指针重新分配到story.txt在内存中创建缓冲区的位置,没有fclose(x),假设因为它是一个指针,内存区域将简单地被“”缓冲区覆盖。这个假设准确吗?我是在泄漏还是浪费内存,还是这种方法可以?

c file-io fopen fclose file-pointer

2
推荐指数
1
解决办法
100
查看次数

如何在Perl中操作文件指针

因此,我正在阅读日历文件以在文件中插入日期,并且我希望日期保持按时间顺序排列.当我找到日期应该去的地方时,问题出现了,文件已经超过了我要插入的点.

我正在查看的日历文件如下所示:

# November 2010
11/26/2010
11/27/2010
11/28/2010
11/29/2010
11/30/2010
# December
12/24/2010
12/25/2010
12/26/2010
12/27/2010
12/28/2010
12/29/2010
12/30/2010
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像这样:

while (my $line = <FILE>) {
    if (substr($line, 0, 1) =~ m/\#/ || $line =~ m/calendar/) { #if the line is commented out or contains the calendar's name skip to next line
        next;
    }
    chomp($line);
    my ($temp_month, $temp_day, $temp_year) = split(/\//, $line, 3);
    if ($year == $temp_year && $month == $temp_month && $day < $temp_day) {
        ?
    }
}
Run Code Online (Sandbox Code Playgroud)

那么有关于如何指向文件中的前一个位置的任何建议吗?

perl file-io file-pointer

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

对于C中的文件指针,如何测量当前位置到文件末尾的距离?

对于给定的文件指针(FILE *),是否可以快速确定从当前位置到文件末尾的距离。

计算实际距离所需的时间不应取决于距离。

比如减法fpos_t,但是fpos_t不是整数,不能进行数值运算。有什么替代方法吗?

c position file eof file-pointer

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

资源泄漏或误报

我有这样的代码:

std::string getInfo(FILE *fp)
{
    char buffer[30];
    if (fread(buffer, 19, 1, fp) == 1)
        buffer[19] = '\0';
    else
        buffer[0] = '\0';

    return buffer;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 cppcheck 进行静态分析,它会发出警告:

error: Resource leak: fp [resourceLeak]
 return buffer;
 ^
Run Code Online (Sandbox Code Playgroud)

在我看来,由于返回是按值计算的,因此数据将从“缓冲区”复制到 std::string 的存储中,因此不会发生泄漏。

这会带来一些真正的问题还是误报?

c++ static-analysis filehandle file-pointer cppcheck

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