标签: file-io

有没有更简单的方法将 BufReader 传递给函数?

要读取 PNG 文件的字节,我想创建一个名为 的函数read_8_bytes,每次调用该函数时都会读取文件中接下来的 8 个字节。

fn main(){
   let png = File::open("test.png").expect("1");
   let mut png_reader = BufReader::new(png);
   let mut byteBuffer: Vec<u8> = vec![0;8];
   png_reader.read_exact(&mut byteBuffer).expect("2"); 
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,如果我继续read_exact从 main 调用,我可以读取接下来的 8 个字节。我尝试创建一个函数来执行此操作,但解决方案似乎不必要地复杂。我想知道是否有更好的方法。

我以为我必须将 BufReader 传递给该函数,但由于 Rust 的工作原理,这使事情变得复杂,我最终发现我需要做类似的事情:

fn read_eight_bytes<R: BufRead>(fd: &mut R)
Run Code Online (Sandbox Code Playgroud)

这可以编译,但我不高兴,因为我不明白为什么需要这样做并且看起来很复杂。有没有一种简单的方法可以让我可以将文件描述符类型的东西传递给函数并让它像 C 中那样存储位置而不必这样做?

file-io rust

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

有没有办法将字符串变量传递给c中的remove()

好的,这就是我正在使用的功能remove()

int fmove(const char * filepth, const char * destpth)
{
    FILE * fp;
    fp = fopen(filepth, "r+");

    FILE * fpdest;
    fpdest = fopen(destpth, "w");

    if ((fp != NULL) && (fpdest != NULL))
    {
        char fpdata[999];
        fgets(fpdata, 999, fp);
        fputs(fpdata, fpdest);

        remove(filepth);
    } else
    {
        prtmessage("ERROR", "Cannot move file!");
        return 1;
    }

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

remove()返回-1。我知道数组返回它们的指针(我说得对吗?),但是有没有办法将字符串传递到filepathto remove()

c io file-io file

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

如何使用 sudo 权限打开一个新文件以在 perl 中写入

我正在尝试在 Linux 环境中打开一个新文件并写入一些内容。一般来说,操作目录需要 sudo 权限才能创建/写入新文件。在 perl 中我怎样才能以编程方式实现这一点?我希望使用 sudo 打开文件句柄,以避免权限被拒绝错误。

我很少看到关于此的旧帖子,但没有一个解决方案对我有用。我知道一种解决方案是使用 sudo 权限运行 perl 脚本,但我想执行在脚本内写入的操作,请建议

我的代码是这样的 -

open(my $fh, ">", $filename) or die "Could not open file '$filename' $!"; # Dies with the error
Run Code Online (Sandbox Code Playgroud)

我也尝试过

open(my $fh, '-|', 'sudo', '>', $filename) or die "Could not open file '$filename' $!"; # Asking for password
Run Code Online (Sandbox Code Playgroud)

perl file-io sudo

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

fscanf无法正确读取文件〜以HEX格式读取字节的问题

我目前正在尝试做一些我用C++做过几十次的事情,但这是我第一次用C语言做的事情.

我有一个包含3列的巨大文本文件:hexNumber unsignedChar int

adam  38      1
john  39      1
sara  3a      1
frank        3b      0
Christopher        3c      0
kate        3d      0
Run Code Online (Sandbox Code Playgroud)

但是,就像我说文件很大,然后之间的空白因某种原因而变化.我不知道,我没有制作文件.我理解它的方式fscanf是由空格分隔的,所以任何金额都应该没问题吧?

我正在尝试将其读入一个结构数组,这是我的代码:

typedef struct node {
    unsigned char myHex;
    char* myString;
    int myInt;
} node;

void foo(bar* c){

    if( c == NULL )
        return;

    struct node nArr[205] ;

    //read in opcode information
    FILE *fp;
    fp = fopen( "input.txt" , "r" );

    if ( fp == NULL ) {
        fprintf( stderr, "Can't open input file file.txt!\n");
        exit(-1);
    }

    int …
Run Code Online (Sandbox Code Playgroud)

c file-io hex struct scanf

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

如何对包含通过索引相互关联的数据的多个数组进行排序

我有一组包含城市,国家,纬度和纬度的数组.c ++语言.

ifstream file("worldcities.csv");
getline(file, temporay);
//inputs the file into 4 arrays for each catergories
for (i=0;getline(file,(cities[i]),',');i++)
{
getline(file, countries[i], ',');
getline(file, latitude[i], ',') ;
getline(file, longitude[i]);
}
Run Code Online (Sandbox Code Playgroud)

我如何同时对纬度和经度阵列进行排序,以找到列表中所有其他列表的前五个最低或最高,但同时不会丢失那些长期与之相关的城市和国家的元素?

c++ arrays sorting file-io vector

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

是否有可能确保某个文件可以在不打开的情况下写入?

我为输出文件名选择编写了一个自定义控件,其中包含文件名的典型:文本框,"浏览"按钮以及特定于我的应用程序的一些其他功能.

文本框根据文件名更改颜色.如果无法写入文件位置,则会变为红色.如果文件已存在,则变为黄色.否则,它仍然是系统指定的颜色.

要查看文件是否存在,我使用IO.File.Exists; 很简单.

我实现了"如果文件可以写入"作为一个简单的try-catch块,其中文件实际打开,写入其中,关闭,然后删除.如果在任何时候抛出异常,我知道用户不能使用该文件名,我将文本框变为红色.

这是一个全能的; 因为我正在做我打算做的实际操作,所以它是万无一失的.然而,让软件创建和删除疯狂的文件似乎是不负责任的,只是为了看它是否可以.

所以我的问题是,如何在不创建文件的情况下复制此功能?我可以看到我必须:

  1. 检查合法性的路径(例如,'z:'不是有效的文件名).这需要解析路径并确保所有目录都存在.
  2. 如果该位置存在,我必须检查写入权限.(为此,有几个回答的问题.)

还有别的事吗?

编辑

几分钟内,我看到人们都已经投票最多的是批评,我正在检查一个答案在所有该文件是它发生的实际写入之前访问.虽然我很欣赏专家从我的问题中"退后一步",看看是否有完全不同的方法来实现它,告诉我我不应该这样做,这不是我的问题的答案.

所以让我详细说明我的应用程序(我不希望同时有数百个用户).

我在数据采集应用程序中使用此文件选择器控件.在许多情况下,您即将运行的测试以某种方式"昂贵".因此,非常谨慎地进行设置至关重要.覆盖数据可能非常昂贵(对于可怕的用户,我有一个复选框,将日期和时间追加到毫秒到文件名).

因此,我的指示器颜色的目的不是为软件提供一个确定文件可以写入的确定方式(该检查仍然在它实际必须的时刻完成),它是作为用户的指示器,至少他已正确设置文件名,所以如果他继续前进,他保证不会覆盖旧数据,他几乎可以确定最后一分钟的IO错误(文件名错误)不会让实验运行未记录.

.net c# vb.net file-io

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

在Perl中合并具有相同文件名的文件

我目前在合并Perl中的文件时遇到了问题.有两个目录/文件夹,它们成对包含相同的名称和扩展名文件.例如,在文件夹1中,我有1.fastq,2.fastq,....,10.fastq文件.在文件夹2中,我有完全相同的文件名1.fastq,2.fastq,....,10.fastq,但它们包含不同的信息.我想合并具有相同名称的文件,在开始时我尝试了cat命令

$ cat 1.fastq 1.fastq > 1.fastq
Run Code Online (Sandbox Code Playgroud)

但是,如果文件太多,例如1000+,我需要做1000次以上.如何使用perl命令自动完成?

先感谢您.

perl file-io fastq

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

在C中为txt添加空格

我正在从复数中清除一个txt,并用fscanf逐字逐句读取txt.问题是当我用fwrite编写干净的txt时,它会将所有内容写在一起.

我试图定义一个字符并仅指定一个空格,但在写入时也添加了"òwD".任何人都知道如何只添加''?

char espa[0];       
espa[0]=' ';
f2 = fopen("clean.txt", "w");   

       while(!feof(f))
       {
            char reader[100];
            int aux;
            fscanf (f, "%s", reader);

            if feof(f){
                printf("%s ", reader);
                printf("\n\nFin del fichero\n");
            }
            else
                if(cadena[(strlen(reader)-1)]=='s'){
                    for(aux=0;aux<(strlen(reader)-1);aux++){
                        printf("%c", reader[aux]);
                    }
                    fwrite(cadena, (strlen(reader))-1, 1, f2); //Add clean word
                }
                else{
                    printf(" %s ", reader);
                    fwrite(reader, (strlen(reader)), 1, f2); //Add normal word
                }

            fwrite(espa, (strlen(espa)), 1, f2); //Here I try to add the space
       }
       fclose(f);  
       fclose(f2);
}
Run Code Online (Sandbox Code Playgroud)

c file-io

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

Python逐列读取文本文件

所以我有一个看起来像这样的文本文件:

1,989785345,"something 1",,234.34,254.123
2,234823423,"something 2",,224.4,254.123
3,732847233,"something 3",,266.2,254.123
4,876234234,"something 4",,34.4,254.123
...
Run Code Online (Sandbox Code Playgroud)

我正在运行此代码:

file = open("file.txt", 'r')
readFile = file.readline()

lineID = readFile.split(",")
print lineID[1]
Run Code Online (Sandbox Code Playgroud)

这让我可以通过","分解我的文本文件中的内容,但是我想要做的是将它分成列,因为每行中都有大量的ID和其他内容.我如何将文本文件拆分成列并逐个调用列中的每一行?

python file-io split

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

为什么Java不能在我的Ubuntu桌面上创建这个文件?

我的文件系统上有以下现有的目录结构(使用ext4的Ubuntu 12.04桌面):

/
    home/
        myuser/
            .myapp/
                logs/
                    myapp.log
                data/
                lib/
Run Code Online (Sandbox Code Playgroud)

...以及以下Java代码:

try {
    // If no such file exists, create it and write zero (0) to it.
    if(!myFile.exists()) {
        System.out.println("myFile is: " + myFile.getAbsolutePath());
        myFile.createNewFile();
        myFileWriter.write("0"); // Configured to write to myFile
    }
} catch(IOException ioExc) {
    logger.error(ExceptionUtils.getStackTrace(ioExc));
    throw new RuntimeException(ioExc);
}
Run Code Online (Sandbox Code Playgroud)

......抛出以下异常:

myFile is: /home/myuser/.myapp/data/replay/Loader-0-replay.log
java.lang.RuntimeException: java.io.IOException: No such file or directory
    at net.myuser.myapp.tools.myapp.Loader.<init>(Loader.java:69)
    at net.myuser.myapp.tools.myapp.MyAppTool.loadWords(MyAppTool.java:125)
    at net.myuser.myapp.tools.myapp.MyAppTool.run(MyAppTool.java:65)
    at net.myuser.myapp.tools.myapp.MyAppTool.main(MyAppTool.java:41)
Caused by: java.io.IOException: No such file or …
Run Code Online (Sandbox Code Playgroud)

java file-io ioexception ext4 ubuntu-12.04

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

标签 统计

file-io ×10

c ×3

perl ×2

.net ×1

arrays ×1

c# ×1

c++ ×1

ext4 ×1

fastq ×1

file ×1

hex ×1

io ×1

ioexception ×1

java ×1

python ×1

rust ×1

scanf ×1

sorting ×1

split ×1

struct ×1

sudo ×1

ubuntu-12.04 ×1

vb.net ×1

vector ×1