在 Ruby 中,如何在复制之前检查文件是否比目标新?
我在Ruby-doc.org 中找到了FileUtils.uptodate?,但它似乎不起作用。
运行时出现此错误消息:
/Users/bprov/.rvm/rubies/ruby-2.0.0-p451/lib/ruby/2.0.0/fileutils.rb:148:in
uptodate?': undefined methodeach' for "/Users/bprov/folder2/homecontroller":String (NoMethodError ) 来自 Test_Copy.rb:11:inblock in <main>' from Test_Copy.rb:6:inforeach' 来自 Test_Copy.rb:6:in `'
我有这样的事情:
require 'fileutils'
$sourcepath = "/Users/bprov/railsbridge"
$destinationpath = "/Users/bprov/folder2"
Dir.foreach($sourcepath) do |file|
if (file =~ /^\./ )
# Do nothing
else
puts file
if FileUtils.uptodate?($sourcepath + "/" + file, $destinationpath + "/" + file)
# Do nothing
else
# If newer
FileUtils.cp($sourcepath + "/" + file, $destinationpath + "/" + …Run Code Online (Sandbox Code Playgroud) 所以我有我的写入文件功能,它将创建该文件,如果它不存在,它的工作但问题是你第一次运行代码时文件不存在它创建它然后崩溃程序
//writing file to Error.txt
string path = @err;
if (!File.Exists(path)) // if does not exist make it
{
File.Create(path);
TextWriter tw = new StreamWriter(path); //crashes here after create
tw.WriteLine(i);
tw.Close();
}
Run Code Online (Sandbox Code Playgroud)
例外情况是:
mscorlib.dll中发生了未处理的"System.IO.IOException"类型异常
附加信息:进程无法访问文件
'C:\ Users\Desktop\TestStuff\error.txt',因为它正由另一个进程使用.
我想读取一个文本文件,其中图像像素值以这种方式存储
234
23
176
235
107
187
201
128
147
...
....
..
Run Code Online (Sandbox Code Playgroud)
我试图以这种方式阅读这个文本文件
#include<stdio.h>
#define M 2500
int main()
{
unsigned new_img[M];
unsigned char a;
FILE *input;
input=fopen("D:/trail.txt","r");
for(i=0;i<M;i++)
{
a=fgetc(input);
new_img[i]=(int)a;
input++;
}
....
....
...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试打印它时显示一些随机值.此外,我所有的像素值都在0到255的范围内.但在输出屏幕上我得到的值大到1到100万
程序:
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
FILE *f;
char* line;
size_t ln=100;
char* s;
line=new char[100];
s=new char[100];
cout<<"input key"<<endl;
cin>>s;
f=fopen("parvin.txt","r");
if(f==NULL)
{
cout<<" no file TO read so creating for writing "<<endl;
//return 0;
f=fopen("parvin.txt","w");
fputs(s,f);
fputc('\n',f);
}
else
{
while(! feof(f))
{
fgets(line,100,f);
cout<<line<<endl;
//if(!strncmp(line,s,strlen(line)-1))
if(strcmp(line,s)== 0 )
{
cout<<"duplicate found"<<endl;
fclose(f);
return 0;
}
}
fclose(f);
f=fopen("parvin.txt","a+");
fputs(s,f);
fputc('\n',f);
}
fclose(f);
}
Run Code Online (Sandbox Code Playgroud)
这里是我喜欢读取输入字符串并将其写入文件的上述程序,前提是字符串不存在于文件中.
在读取模式下打开文件.
如果第一次输入文件不存在,如果文件指针返回NULL,则创建一个文件写入模式并写入输入的字符串.
在C编程中,每当我使用它fgetc(file)来读取所有字符,直到它的文件结束它.但是当我使用类似的fscanf(file, "%c")功能时,它会打印出奇怪的字符.码:
#include <stdio.h>
#include <stdlib.h>
int main() {
char c;
FILE * file = fopen("D\\filename.txt", "r");
while (c != EOF) {
fscanf(file, "%c", &c);
printf("%c", c);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我使用fgetc而不是fscanf,它的工作原理.并打印出文件中存在的每个字符.
任何人都可以回答为什么会这样吗?
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
const char FILE_NAME[] = "inputfile.txt";
int main()
{
FILE *in_file; /* input file */
in_file = fopen(FILE_NAME, "r");
if (in_file == NULL) {
printf("Cannot open %s\n", FILE_NAME);
exit(8);
}else{
printf("File opened %s\n", FILE_NAME);
}
fclose(in_file);
return (0);
}
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
无法打开inputfile.txt
但文件就在那里.有人能帮我吗?
(如果我将"r"更改为"w",我可以写入文件,但我在SSD上找不到该文件)
我正在尝试通过StringBuilder和File.WriteLn()将一个html文件写入磁盘,但该文件缺少几行,因此无用.我的代码是:
private void BuildAndWriteHTMLFile()
{
StringBuilder sb = new StringBuilder();
sb.Append("<!DOCTYPE html>");
sb.Append("<html lang=\"en\">");
sb.Append("<head>");
sb.Append("<meta charset=\"utf-8\">");
sb.Append("<title>Green Bay Packers 2013 Schedule (All times Central)</title>");
sb.Append("<script src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js\"></script> ");
sb.Append("<script src=\"http://maps.google.com/maps/api/js?sensor=false\"></script> ");
sb.Append("<script src=\"gomap.js\"></script> ");
sb.Append("<!--[if IE]>");
sb.Append("<script src=\"http://html5shiv.googlecode.com/svn/trunk/html5.js\"></script>");
sb.Append("<![endif]-->");
. . . // oodles on noodly code elided for lack of reason to leave it in
sb.Append("this.singleMarker = false;");
sb.Append("this.lockGeocode = false;");
sb.Append("this.markers = [];");
sb.Append("this.tmpMarkers = [];");
sb.Append("this.geoMarkers = [];");
sb.Append("},");
sb.Append("isVisible: function(latlng) {");
sb.Append("return this.map.getBounds().contains(latlng);");
sb.Append("}");
sb.Append("}");
sb.Append("})(jQuery);"); …Run Code Online (Sandbox Code Playgroud) 我有一个文本文件,首先描述一些行,然后描述一些彩色线:
1 2 3 4
5 6 7 8
9 10 11 12
red 1 0 0 1 2 3 4
green 0 1 0 5 6 7 8
blue 0 0 1 9 10 11 12
Run Code Online (Sandbox Code Playgroud)
每个部分中的行数在执行时是未知的
我std::cin >>为这些结构重载了运算符:
struct Point { int x, y; }
struct Line { Point a, b; }
struct Color { float r, g, b; std::string name; };
struct ColorfulLine { Line line; Color color; };
Run Code Online (Sandbox Code Playgroud)
(这里的完整示例:http://ideone.com/bMOaL1 …
所以我决定使用这段代码:
CaseList = []
f_Case = open("C:/Users/Luke Roberts/Desktop/Lists/CaseList.txt", "r")
for line in f_Case:
CaseList.append(line)
print(CaseList)
Run Code Online (Sandbox Code Playgroud)
但是,当我打印列表时,它出现为:
['Case 1\n', 'Case 2\n', 'Case 3\n', 'Case 4\n', 'Case 5']
Run Code Online (Sandbox Code Playgroud)
有没有办法将它添加到列表中而没有'\n'?如果没有,有没有办法从每个字符串中删除'\n'?
任何和所有的帮助表示赞赏!干杯
我不要任何增强依赖或任何外部依赖。我可以逐行读取文件,然后分别处理每一行。但是,如果效果更好,我还可以将整个文件加载到内存中,然后逐行处理它。
最好的方法是什么?另外,最快的方法是什么,它们有何不同?
同样,这既可以使用常规文本文件,又可以通过终端通过管道传输文件。