C# 大量然后,您将其强制存储到磁盘的决定看起来就不那么聪明了。蒸汽是一种抽象,给你自由和灵活性。将文件存储在可执行文件旁边早已不可信,而不是用于便携式应用程序。你应该阅读流。值得理解抽象背后的想法。即使你的长辈不想知道,你也可以学习。如果你转向一个更自由的项目
C# 大量然后,您将其强制存储到磁盘的决定看起来就不那么聪明了。蒸汽是一种抽象,给你自由和灵活性。将文件存储在可执行文件旁边早已不可信,而不是用于便携式应用程序。你应该阅读流。值得理解抽象背后的想法。即使你的长辈不想知道,你也可以学习。如果你转向一个更自由的项目,c#,delphi-7,filestream,C#,Delphi 7,Filestream,大量然后,您将其强制存储到磁盘的决定看起来就不那么聪明了。蒸汽是一种抽象,给你自由和灵活性。将文件存储在可执行文件旁边早已不可信,而不是用于便携式应用程序。你应该阅读流。值得理解抽象背后的想法。即使你的长辈不想知道,你也可以学习。如果你转向一个更自由的项目,将来可能会派上用场。这一点都不复杂。如果有什么不同的话,那就简单多了。当前的代码,包括Delphi和C#版本,在错误处理方面完全被破坏了。未能创建文件会导致可怕的运行时错误。Delphi代码的原始作者是无知的。按照指示,逐字翻译是一个非常糟糕
大量然后,您将其强制存储到磁盘的决定看起来就不那么聪明了。蒸汽是一种抽象,给你自由和灵活性。将文件存储在可执行文件旁边早已不可信,而不是用于便携式应用程序。你应该阅读流。值得理解抽象背后的想法。即使你的长辈不想知道,你也可以学习。如果你转向一个更自由的项目,将来可能会派上用场。这一点都不复杂。如果有什么不同的话,那就简单多了。当前的代码,包括Delphi和C#版本,在错误处理方面完全被破坏了。未能创建文件会导致可怕的运行时错误。Delphi代码的原始作者是无知的。按照指示,逐字翻译是一个非常糟糕的主意。标记为答案,但由于某种原因,它现在没有将数据写入for循环?我有
using
语句,其中包含for循环
。无需担心!似乎只是我拥有的读取文件的测试程序有问题。@pfferno您在哪里检查文件是否有数据?数据将被缓冲,缓冲区将只在缓冲区已满时写入-因此,在关闭文件之前,部分数据可能不会被写入。操作完成后,我关闭了进行写入的应用程序。我用一个不同的应用程序测试了它来读取数据,它似乎都在那里,所以我们很好!感谢标记为答案,但出于某种原因,它现在没有将数据写入for循环?我有using
语句,其中包含for循环
。无需担心!似乎只是我拥有的读取文件的测试程序有问题。@pfferno您在哪里检查文件是否有数据?数据将被缓冲,缓冲区将只在缓冲区已满时写入-因此,在关闭文件之前,部分数据可能不会被写入。操作完成后,我关闭了进行写入的应用程序。我用一个不同的应用程序测试了它来读取数据,它似乎都在那里,所以我们很好!谢谢
CONST
RecordSize= 128;
HeaderSize=128;
TESTrec = packed record
now: TDateTime;
//other fields here
end;
TESThdrrec = packed record
now: TDateTime;
Firsttime: TDateTime;
Lasttime: TDateTime;
//other fields listed here
end;
Function TRampBuildForm.CreateTest(FilePath:String;StartTime:TDateTime;EndTime:TDateTime):Boolean;
var
Records:Int64;
CurrentOffSet:Int64;
CurrentTime:TDateTime;
NewRec:TESTrec;
NewHeader:TESThdrrec;
ix:Integer;
percent:Integer;
begin
Try
RampStream:=TFileStream.Create(FilePath,fmCreate OR fmShareExclusive );
except
ShowMessage('cannot create Ramp '+Rampname+chr(13)+'Check to see if file is open');
CreateTest:=false;
end;
FillChar(NewHeader,HeaderSize,0);
NewHeader.now:=Now;
NewHeader.Firsttime:=StartTime;
NewHeader.LastTime:= EndTime;
FirstAllowableTime:=StartTime;
LastAllowableTime:=EndTime;
Records:= Round((EndTime-StartTime)/ONE_SECOND)+1;
RampStream.Write(NewHeader,HeaderSize);
FillChar(NewRec,RecordSize,0);
label8.Caption:='Expanding ';
Progressbar1.Position:=0;
CurrentTime:=StartTime;
percent:=0;
refresh;
Application.ProcessMessages;
For ix:= 1 to Records do
begin
if (ix*100) div Records > percent then
begin
percent:= (ix*100) div Records;
Progressbar1.position:=percent;
refresh;
Application.ProcessMessages
end;
NewRec.Now:=CurrentTime;
RampStream.Write(NewRec,RecordSize);
CurrentTime:=CurrentTime + ONE_SECOND;
end;
ProgressBar1.Position:=100;
refresh;
CreateTest:=True;
RampStream.Free;
end;
const int RecordSize = 128;
const int HeaderSize = 128;
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Testrec
{
public double now;
//other fields here
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct TESThdrrec
{
public double now;
public double Firsttime;
public double Lasttime;
//other fields here
}
private Boolean CreateTest(string FilePath, double StartTime, double EndTime)
{
long Records;
long CurrentOffSet;
double CurrentTime;
TESTrec NewRec = new TESTrec();
TESThdrrec NewHeader = new TESThdrrec();
int ix;
int percent;
NewHeader.now = System.DateTime.Now.ToOADate();
NewHeader.Firsttime = StartTime;
NewHeader.Lasttime = EndTime;
FirstAllowableTime = StartTime;
LastAllowableTime = EndTime;
if (!File.Exists(FilePath)) //if file doesn't exist
{
try
{
using (RampStream = new FileStream(FilePath, FileMode.Create))
{
byte[] buffer = GetBytes2(NewHeader); //puts struct into byte array
RampStream.Write(buffer, 0, HeaderSize); //write byte array to file
}
}
catch (Exception e)
{
System.Windows.MessageBox.Show("Cannot create file" + RampName + Environment.NewLine + "Error Message: " + e);
}
}
Records = (long)(Math.Round((EndTime - StartTime) / ONE_SECOND) + 1);
RampInfo.Content = "Expanding ";
ProgressBar1.Value = 0;
CurrentTime = StartTime;
percent = 0;
//TAKING LONG TIME HERE!!
for (ix = 1; ix <= Records; ix++)
{
if (((ix * 100) / Records) > percent)
{
percent = (ix * 100) / (int)Records;
}
NewRec.now = CurrentTime;
using (RampStream = new FileStream(FilePath, FileMode.Open))
{
byte[] buffer = GetBytes2(NewRec); //puts struct into byte array
RampStream.Write(buffer, 0, RecordSize); //write byte array to file
}
//RampStream.Write(NewRec, RecordSize);
CurrentTime = CurrentTime + ONE_SECOND;
}
ProgressBar1.Value = 100;
RampStream.Close();
return true;
}