标签: file

文件描述符:将read int值存储到变量中的麻烦

我正在尝试使用文件描述符.我已经被教导使用文件流(fopen,fread等),但现在我想了解这种使用文件的其他方式.

我要发布的这段代码有点琐碎和愚蠢:它只是打开一个名为"file"的文件,它具有以下结构:4个字符,一个整数和每行的'\n'值.我并没有尝试做任何有用的事情,我只是尝试做一些基本的操作,我曾经非常轻松地使用流.特别是,我的文件有这个信息:

row 1
row 2
row 3
Run Code Online (Sandbox Code Playgroud)

"row"和空格代表4个字符,数字代表整数.我只想打印文件内容,但是我想记住我遇到的int值(否则打印每个符合的字符就足够了)(因此我可以根据该值进行一些详细说明,如果我想要的话)至).这是我使用的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>

int main() {
    int fd;
    fd = open("file", O_RDONLY);

    char *buffer;

    buffer = (char*)malloc(20*sizeof(char));
    unsigned char x;
    int y = -1;
    int number = 1;
    int i=0, j;

    while(read(fd, &x, 1*sizeof(char)) > 0) {
        for(j=0; j<3; j++) {
            buffer[i] = x;
            i++;
            read(fd, &x, sizeof(char)); // or 1 instead of sizeof(char)
        }
        buffer[i] = x;
        buffer[i+1] = '\0';
        printf("byte read: %d\n", …
Run Code Online (Sandbox Code Playgroud)

c int file descriptor

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

优化OCaml中的文件写入操作?

基本上在我的项目中,我试图将字符串列表写入文件,如下所示:

val mutable rodata_list : (string*string) list = []
.....
let zip1 ll =
   List.map (fun (h,e) -> h^e) ll in
let oc = open_out_gen [Open_append; Open_creat] 0o666 "final_data.s" in
  List.iter (fun l -> Printf.fprintf oc "%s\n" l) (zip1 rodata_list);  
Run Code Online (Sandbox Code Playgroud)

这是我的问题,通常rodata_list可以达到800,000大小,我们的服务器(64-bit, 32 core Intel(R) Xeon(R) CPU E5-2690 0 @ 2.90GHz)上面的代码大约需要3.5秒.. OCaml我使用的版本是4.01.0.

这是不可接受的,特别是因为我有4个像这样的代码写入文件.完全他们可以带我超过15秒..

我试过这个:

Printf.fprintf oc "%s\n" (String.concat "\n" (zip1 rodata_list));
Run Code Online (Sandbox Code Playgroud)

但没有明显的改善..

所以我想知道,如何优化这部分?我感谢任何解决方案.谢谢!

optimization ocaml file ml

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

如何在python中复制文本文件

这就是我想要做的事情:

import copy
def printtext(swefile):
    for row in swefile:
        print(row)
text = open("wordsv.txt","r",encoding="utf-8")
text2 = copy.copy(text)
printtext(text)
print(text2.readlines())
Run Code Online (Sandbox Code Playgroud)

但这是不可能的,TypeError:无法序列化'_io.TextIOWrapper'对象.所以我想知道是否有一种很好的"克隆"文本变量的方法,这样我就可以再次打印所有的行.我知道我可以再次阅读该文件,但是这个答案并没有解决我遇到的更大的问题,所以任何有关如何完成这项工作的建议都是有帮助的.


这是更大的背景,因为我无法用你的建议解决我的问题:

with open(textfilename, "r", encoding = "utf-8") as swefile:
    for row in swefile:
        word = row.strip()
        tempfile = copy.copy(swefile)
        l = getFurthest(word,tempfile)
Run Code Online (Sandbox Code Playgroud)

我想在这里发生的事情是,我想发送swefile尚未读取的部分(即通过for循环迭代)getFurthest()!而且我无法发送,swefile因为这将使整个事情被读取,因此for循环中的迭代将停止,对吧?那么我怎样才能只发送已经读过的文本文件的一部分,getFurthest()同时仍然可以在其余部分之后迭代?

python text clone file

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

精简使用MFC FindFile API失败

我使用自定义.HMD格式对VC++ MFC应用程序中的某些数据进行二进制编码.想象一下文件夹中有多个HMD文件,我想阅读他们所有的文件名.

我偶然发现CFindFile了MFC的课程.我在项目路径中添加了一堆我的HMD文件并尝试了以下代码 -

CFileFind finder;
BOOL bWorking = finder.FindFile(_T("*.HMD"));
while (bWorking)
{
    bWorking = finder.FindNextFile();
    TRACE(_T("%s\n"), (LPCTSTR)finder.GetFileName());
}
Run Code Online (Sandbox Code Playgroud)

这段代码有效!TRACE打印项目路径中的所有HMD文件.

但是,我试图从随机目录中做同样的事情.我只是data在项目路径中创建了一个目录并将所有HMD文件移动到那里,然后再次尝试代码,如下所示.

CFileFind finder;
BOOL bWorking = finder.FindFile(_T("data\*.HMD")); // Only change is I added data to path
while (bWorking)
{
    bWorking = finder.FindNextFile();
    TRACE(_T("%s\n"), (LPCTSTR)finder.GetFileName());
}
Run Code Online (Sandbox Code Playgroud)

但是,这个无法读取文件名.finder.FindNextFile()false

有人可以告诉我如何修复我对CFindFile的使用,以便我可以从任何随机目录中读取文件吗?

PS我正在使用MultiByte字符集.

c++ winapi mfc file visual-c++

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

用于逐行比较2个文件的脚本

我有两个文本文件:

FILE1.TXT

dadads 434 43 {"4fsdf":"66db1" fdf1:"5834"}
gsgss 45 0 {"gsdg":"8853" sgdfg:"4631"}
fdf 767 4643 {"klhf":"3455" kgs:"4566"}
.  
.
Run Code Online (Sandbox Code Playgroud)

FILE2.TXT

8853
6437437567
36265
4566
.
.
Run Code Online (Sandbox Code Playgroud)

输出可以是两个文件

Match.txt

gsgss 45 0 {"gsdg":"8853" sgdfg:"4631"}
fdf 767 4643 {"klhf":"3455" kgs:"4566"}
Run Code Online (Sandbox Code Playgroud)

Non_Match.txt

dadads 434 43 {"4fsdf":"66db1" fdf1:"5834"}
Run Code Online (Sandbox Code Playgroud)

有人可以帮我写这个bash脚本吗?

如果它有帮助,我想我在这里有逻辑:

 for (rows in File1.txt) {
   bool found = false;
    for (id in File2.txt) {
      if (row contains id) {
      found = true;
      echo row >> Match.txt
      break;
     }
    }
   if (!found) {
      echo row …
Run Code Online (Sandbox Code Playgroud)

linux bash shell file file-comparison

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

主要的未定义方法'close':Ruby中的Object(NoMethodError)

filename = ARGV.first

txt = open filename

puts "Here's your file #{filename}:"
print txt.read

puts "Type the filename again: "
file_again = $stdin.gets.chomp

txt_again = open file_again

print txt_again.read

close(txt)
close(txt_again)
Run Code Online (Sandbox Code Playgroud)

程序运行正常,直到结束,但在打印第二个文件的内容后立即崩溃标题错误消息.

我使用(.class)检查了txt,txt_again并确认它们都是File对象.为什么不靠近工作?

ruby file fclose learn-ruby-the-hard-way

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

C#文本日志文件的最佳实践

我有一个在IIS托管环境中运行的ASP.Net MVC应用程序,我希望有一个应用程序明智的日志文件来记录一些自定义事件和错误.

这样做的最佳做法是什么?

  • 我应该在应用程序启动时打开文件(比如log.txt),每当我需要时使用StreamWriter写入,并在应用程序结束时关闭

  • 或打开 - >写 - >每次关闭?

对于第一种方法,我担心当应用程序域退出意外时文件仍会保持打开状态,

对于第二种方法,由于多线程操作或太频繁打开/关闭可能有IO错误?

有任何想法吗 ?

c# asp.net-mvc logging text file

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

在java中用字节写文件的概念是什么?

我知道当我想写一个文件时,我应该使用这样的代码:

InputStream inputStream = new BufferedInputStream(url.openStream());
OutputStream outputStream = new FileOutputStream("/sdcard/myfile.jpg");

byte Data[] = new byte[1024];
long total = 0;

while ((count=inputStream.read(Data)) != -1) {
    total = total+count;
    outputStream.write(Data,0,count);
}
Run Code Online (Sandbox Code Playgroud)

但我无法理解该结果会发生什么,是否将图像文件从零写入100?

谁能形容我这是怎么发生的?谢谢

java file fileoutputstream

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

在文本文件中插入400个数字

我试图在文本文件中写入1到400之间的数字.我正在使用下面的代码,它运行没有任何错误,但文件是空的.

任何帮助,将不胜感激.

#include <stdio.h>

int main(void)
{
    FILE *filePointer;
    filePointer = fopen("file.txt","w");
    int i; 
    for(i=0; i > 400; i++)
    {
        fputs("%d, ",i,filePointer);
    }
    fclose(filePointer);
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

c text file fputs

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

Python:将数组值写入文件

我正在编写一个python项目,它涉及我读取一个文件并用文件中的整数值填充一个数组,做一个完全疯狂的非重要过程(tic tac toe game)然后在最后添加一个数字(wins)到数组并将其打印回文件.

这是我的文件阅读代码:

highscores = []
#Read values from file and put them into array
file = open('highscore.txt', 'r') #read from file
file.readline() #read heading line
for line in file:
    highscores.append(file.readline())
file.close() #close file
Run Code Online (Sandbox Code Playgroud)

这是我的文件编写代码:

highscores.append(wins)
# Print sorted highscores print to file
file = open('highscore.txt', 'w') #write to file
file.write('Highscores (number of wins out of 10 games):') #write heading line
for i in len(highscores):
    file.write(highscores[i])
file.close() #close file
Run Code Online (Sandbox Code Playgroud)

目前我的整个程序一直运行,直到我读到这一行:for i in len(highscores):在我的文件中编写代码.我得到'TypeError:'int'对象不可迭代.

我只是想知道我是否走在正确的轨道上以及如何解决这个问题.我还想要注意,我读取和写入的这些值需要是整数类型而不是字符串类型,因为我可能需要在将新值写入现有数组之前将其写回文件.

我通常不会使用python,所以请原谅我缺乏经验.提前感谢您的帮助!:)

python arrays file append

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