Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
December 06, 2012 error with reading file name | ||||
---|---|---|---|---|
| ||||
I am trying to create simple app that would read user input and open file with such name, but every time when I run it's crash with error "std.file.FileException@std\file.d(294): \1.txt" import std.stdio; import std.string; import std.file; void main() { string getfilename() { auto name = readln(); writeln(name); if (exists(name)) { writeln("exist"); } else writeln("not exist"); return name; } void readfile(string name) { auto filearray = read(name); writeln(name); writeln(filearray); } readfile(getfilename()); } |
December 06, 2012 Re: error with reading file name | ||||
---|---|---|---|---|
| ||||
Posted in reply to Suliman | On 12/06/2012 07:52 AM, Suliman wrote: > I am trying to create simple app that would read user input and open > file with such name, but every time when I run it's crash with error > > "std.file.FileException@std\file.d(294): \1.txt" > > import std.stdio; > import std.string; > import std.file; > > void main() > { > string getfilename() > { > auto name = readln(); > writeln(name); > if (exists(name)) > { > writeln("exist"); > } > else > writeln("not exist"); > > return name; > } > > void readfile(string name) > { > auto filearray = read(name); > writeln(name); > writeln(filearray); > } > readfile(getfilename()); > > > } The exception is thrown here: version(Windows) { alias TypeTuple!(GENERIC_READ, FILE_SHARE_READ, (SECURITY_ATTRIBUTES*).init, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, HANDLE.init) defaults; auto h = CreateFileW(std.utf.toUTF16z(name), defaults); cenforce(h != INVALID_HANDLE_VALUE, name); // <-- HERE It seems to be related to a Unicode encoding issue, possibly the encoding that the console is using. (I am assuming that getfilename() reads from the console.) It could be about file access rights as well. Ali |
December 06, 2012 Re: error with reading file name | ||||
---|---|---|---|---|
| ||||
Posted in reply to Suliman | Suliman:
> I am trying to create simple app that would read user input and open file with such name, but every time when I run it's crash with error
>
> "std.file.FileException@std\file.d(294): \1.txt"
Try to declutter your code as much as possible, then print the file name before trying to call File, and take a look at what's inside that string. This is not a solution, but it's a start.
Bye,
bearophile
|
December 06, 2012 Re: error with reading file name | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | I had put next try-catch block yo my code void readfile(string name) { try { auto filearray = read(name); writeln(name); writeln(filearray); } catch (Exception e) { writeln("CATHCHED %s", e.msg); } } Am I right with it's place? I get to console only some crap. |
December 07, 2012 Re: error with reading file name | ||||
---|---|---|---|---|
| ||||
Posted in reply to Suliman | On Thu, 06 Dec 2012 16:52:20 +0100, Suliman wrote:
> I am trying to create simple app that would read user input and open file with such name, but every time when I run it's crash with error
>
> "std.file.FileException@std\file.d(294): \1.txt"
>
After a call to readln, the string returned has termination characters that need to be stripped off.
import std.stdio;
import std.file;
void main()
{
string name = readln();
while(name[$-1] == '\x0a' || name[$-1] == '\x0d')
name.length -= 1;
if(name.exists)
writeln(name, " exists!");
else
{
writeln(name, " doesn't exists!");
return;
}
auto filearray = cast(char[]) read(name);
writeln("\n", filearray);
}
|
December 07, 2012 Re: error with reading file name | ||||
---|---|---|---|---|
| ||||
Posted in reply to ollie | On 12/06/2012 10:39 PM, ollie wrote: > On Thu, 06 Dec 2012 16:52:20 +0100, Suliman wrote: > >> I am trying to create simple app that would read user input and open >> file with such name, but every time when I run it's crash with error >> >> "std.file.FileException@std\file.d(294): \1.txt" >> > > After a call to readln, the string returned has termination characters > that need to be stripped off. Good call. > string name = readln(); > > while(name[$-1] == '\x0a' || name[$-1] == '\x0d') > name.length -= 1; Or with std.string.chomp: string name = chomp(readln()); Ali -- D Programming Language Tutorial: http://ddili.org/ders/d.en/index.html |
Copyright © 1999-2021 by the D Language Foundation